diff --git a/packages/api/methods.test.ts b/packages/api/methods.test.ts
index e68214d83d9925bf2b0bb0fed4c9bd6163c8289f..ff8830010d2debac89e3325a270402b5f69ef5e4 100644
--- a/packages/api/methods.test.ts
+++ b/packages/api/methods.test.ts
@@ -58,11 +58,42 @@ describe('API CRUD operations', () => {
     await api.loadBudget(budgetName);
   });
 
-  // apis: createCategoryGroup, updateCategoryGroup, deleteCategoryGroup
+  // apis: getCategoryGroups, createCategoryGroup, updateCategoryGroup, deleteCategoryGroup
   test('CategoryGroups: successfully update category groups', async () => {
     const month = '2023-10';
     global.currentMonth = month;
 
+    // get existing category groups
+    const groups = await api.getCategoryGroups();
+    expect(groups).toEqual(
+      expect.arrayContaining([
+        expect.objectContaining({
+          hidden: 0,
+          id: 'fc3825fd-b982-4b72-b768-5b30844cf832',
+          is_income: 0,
+          name: 'Usual Expenses',
+          sort_order: 16384,
+          tombstone: 0,
+        }),
+        expect.objectContaining({
+          hidden: 0,
+          id: 'a137772f-cf2f-4089-9432-822d2ddc1466',
+          is_income: 0,
+          name: 'Investments and Savings',
+          sort_order: 32768,
+          tombstone: 0,
+        }),
+        expect.objectContaining({
+          hidden: 0,
+          id: '2E1F5BDB-209B-43F9-AF2C-3CE28E380C00',
+          is_income: 1,
+          name: 'Income',
+          sort_order: 32768,
+          tombstone: 0,
+        }),
+      ]),
+    );
+
     // create our test category group
     const mainGroupId = await api.createCategoryGroup({
       name: 'test-group',
diff --git a/packages/api/methods.ts b/packages/api/methods.ts
index 03acaf0f4f66e3a2578de907ca2e215db9146448..cf8a6aa46257bfd7daf7b1589c0bbd21c169f6c6 100644
--- a/packages/api/methods.ts
+++ b/packages/api/methods.ts
@@ -121,6 +121,10 @@ export function deleteAccount(id) {
   return send('api/account-delete', { id });
 }
 
+export function getCategoryGroups() {
+  return send('api/category-groups-get');
+}
+
 export function createCategoryGroup(group) {
   return send('api/category-group-create', { group });
 }
diff --git a/packages/loot-core/src/server/api.ts b/packages/loot-core/src/server/api.ts
index 2956ce61aefed3e061a5d95445057b4453881cb2..13c731235a0b59e1546524a2e35e5c940099a361 100644
--- a/packages/loot-core/src/server/api.ts
+++ b/packages/loot-core/src/server/api.ts
@@ -514,6 +514,11 @@ handlers['api/categories-get'] = async function ({
     : result.list.map(categoryModel.toExternal);
 };
 
+handlers['api/category-groups-get'] = async function () {
+  checkFileOpen();
+  return handlers['get-category-groups']();
+};
+
 handlers['api/category-group-create'] = withMutation(async function ({
   group,
 }) {
diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts
index 64cd29938bb685dfb44ffe9b9e33d6400a2dbb06..b5e3c0d49ad19aa1c7143e6ae12d0bb3afec1c52 100644
--- a/packages/loot-core/src/server/main.ts
+++ b/packages/loot-core/src/server/main.ts
@@ -361,6 +361,10 @@ handlers['category-delete'] = mutator(async function ({ id, transferId }) {
   });
 });
 
+handlers['get-category-groups'] = async function () {
+  return await db.getCategoriesGrouped();
+};
+
 handlers['category-group-create'] = mutator(async function ({
   name,
   isIncome,
diff --git a/packages/loot-core/src/types/api-handlers.d.ts b/packages/loot-core/src/types/api-handlers.d.ts
index 7ad399073d8f0cbae1b2b561213080efd6f18813..1f314fde6b704ca13452d016185e0d7fd28b0bba 100644
--- a/packages/loot-core/src/types/api-handlers.d.ts
+++ b/packages/loot-core/src/types/api-handlers.d.ts
@@ -109,6 +109,8 @@ export interface ApiHandlers {
     grouped;
   }) => Promise<Array<CategoryGroupEntity> | Array<CategoryEntity>>;
 
+  'api/category-groups-get': () => Promise<CategoryGroupEntity[]>;
+
   'api/category-group-create': (arg: { group }) => Promise<string>;
 
   'api/category-group-update': (arg: { id; fields }) => Promise<unknown>;
diff --git a/upcoming-release-notes/2446.md b/upcoming-release-notes/2446.md
new file mode 100644
index 0000000000000000000000000000000000000000..d37841b1cd7b74bec95110cd6f23788017d59b3a
--- /dev/null
+++ b/upcoming-release-notes/2446.md
@@ -0,0 +1,6 @@
+---
+category: Enhancements
+authors: [psybers]
+---
+
+Provide "api/category-groups-get" API endpoint
\ No newline at end of file