diff --git a/hugegraph-python-client/src/pyhugegraph/api/version.py b/hugegraph-python-client/src/pyhugegraph/api/version.py
new file mode 100644
index 0000000..67fc5a5
--- /dev/null
+++ b/hugegraph-python-client/src/pyhugegraph/api/version.py
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+from pyhugegraph.api.common import HugeParamsBase
+from pyhugegraph.utils.exceptions import NotFoundError
+from pyhugegraph.utils.huge_requests import HugeSession
+from pyhugegraph.utils.util import check_if_success
+
+
+class VersionManager(HugeParamsBase):
+    def __init__(self, graph_instance):
+        super().__init__(graph_instance)
+        self.__session = HugeSession.new_session()
+
+    def close(self):
+        if self.__session:
+            self.__session.close()
+
+    def version(self):
+        url = f"{self._host}/versions"
+        response = self.__session.get(
+            url, auth=self._auth, headers=self._headers, timeout=self._timeout
+        )
+        if check_if_success(response, NotFoundError(response.content)):
+            return response.json()
+        return {}
diff --git a/hugegraph-python-client/src/pyhugegraph/client.py b/hugegraph-python-client/src/pyhugegraph/client.py
index 2398f7f..b833415 100644
--- a/hugegraph-python-client/src/pyhugegraph/client.py
+++ b/hugegraph-python-client/src/pyhugegraph/client.py
@@ -24,6 +24,7 @@
 from pyhugegraph.api.task import TaskManager
 from pyhugegraph.api.traverser import TraverserManager
 from pyhugegraph.api.variable import VariableManager
+from pyhugegraph.api.version import VersionManager
 from pyhugegraph.structure.graph_instance import GraphInstance
 
 
@@ -40,6 +41,7 @@
         self._task = None
         self._metrics = None
         self._traverser = None
+        self._version = None
 
     def schema(self):
         self._schema = self._schema or SchemaManager(self._graph_instance)
@@ -76,3 +78,7 @@
     def traverser(self):
         self._traverser = self._traverser or TraverserManager(self._graph_instance)
         return self._traverser
+
+    def version(self):
+        self._version = self._version or VersionManager(self._graph_instance)
+        return self._version
diff --git a/hugegraph-python-client/src/tests/api/test_version.py b/hugegraph-python-client/src/tests/api/test_version.py
new file mode 100644
index 0000000..1d6325d
--- /dev/null
+++ b/hugegraph-python-client/src/tests/api/test_version.py
@@ -0,0 +1,48 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import unittest
+
+from tests.client_utils import ClientUtils
+
+
+class TestVersion(unittest.TestCase):
+    client = None
+    version = None
+
+    @classmethod
+    def setUpClass(cls):
+        cls.client = ClientUtils()
+        cls.version = cls.client.version
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.client.clear_graph_all_data()
+
+    def setUp(self):
+        self.client.clear_graph_all_data()
+
+    def tearDown(self):
+        pass
+
+    def test_version(self):
+        version = self.version.version()
+        self.assertIsInstance(version, dict)
+        self.assertIn("version", version['versions'])
+        self.assertIn("core", version['versions'])
+        self.assertIn("gremlin", version['versions'])
+        self.assertIn("api", version['versions'])
diff --git a/hugegraph-python-client/src/tests/client_utils.py b/hugegraph-python-client/src/tests/client_utils.py
index cc3c108..12b35db 100644
--- a/hugegraph-python-client/src/tests/client_utils.py
+++ b/hugegraph-python-client/src/tests/client_utils.py
@@ -41,6 +41,7 @@
         self.task = self.client.task()
         self.metrics = self.client.metrics()
         self.traverser = self.client.traverser()
+        self.version = self.client.version()
 
     def init_property_key(self):
         schema = self.schema
