diff --git a/application/pom.xml b/application/pom.xml
index e66a5abaf3..51c267306d 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -507,6 +507,82 @@
+
+
+ openapi-spec
+
+ true
+ none
+ none
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ org.thingsboard.server.ThingsboardServerApplication
+ 9001
+
+
+
+ build-info
+ build-info
+
+ false
+
+
+
+ openapi-start
+ start
+
+ false
+ true
+ -Xmx1024m
+
+ --spring.config.name=thingsboard
+ --spring.profiles.active=openapi
+
+ 180
+ 2000
+
+
+
+ openapi-stop
+ stop
+
+ false
+
+
+
+
+
+ org.springdoc
+ springdoc-openapi-maven-plugin
+ 1.4
+
+
+ generate-openapi-spec
+ generate
+
+
+
+ http://localhost:8080/v3/api-docs/thingsboard
+ openapi.json
+ ${project.build.directory}
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
+
+
+
+
jenkins
diff --git a/application/src/main/resources/thingsboard-openapi.properties b/application/src/main/resources/thingsboard-openapi.properties
new file mode 100644
index 0000000000..410c4072a5
--- /dev/null
+++ b/application/src/main/resources/thingsboard-openapi.properties
@@ -0,0 +1,51 @@
+#
+# Copyright © 2016-2026 The Thingsboard Authors
+#
+# Licensed 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.
+#
+
+# Lightweight startup for OpenAPI spec generation.
+# Activated only via: --spring.profiles.active=openapi
+
+spring.main.banner-mode=off
+
+# Testcontainers PostgreSQL
+database.ts.type=sql
+database.ts_latest.type=sql
+spring.datasource.url=jdbc:tc:postgresql:16.6:///thingsboard?TC_DAEMON=true&TC_TMPFS=/testtmpfs:rw&?TC_INITFUNCTION=org.thingsboard.server.dao.PostgreSqlInitializer::initDb
+spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
+spring.datasource.username=postgres
+spring.datasource.password=postgres
+spring.datasource.hikari.maximumPoolSize=5
+spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
+spring.jpa.properties.hibernate.order_by.default_null_ordering=last
+spring.jpa.show-sql=false
+spring.jpa.hibernate.ddl-auto=none
+
+# Disable transports
+transport.http.enabled=false
+transport.mqtt.enabled=false
+transport.coap.enabled=false
+transport.lwm2m.enabled=false
+transport.snmp.enabled=false
+coap.server.enabled=false
+
+# Disable edges, integrations, EDQS
+edges.enabled=false
+integrations.rpc.enabled=false
+service.integrations.supported=NONE
+transport.gateway.dashboard.sync.enabled=false
+queue.edqs.sync.enabled=false
+queue.edqs.api.supported=false
+usage.stats.report.enabled=false
+service.type=monolith
diff --git a/dao/src/test/resources/sql/system-data.sql b/dao/src/test/resources/sql/system-data.sql
index 0b17d4f108..2cd038aae7 100644
--- a/dao/src/test/resources/sql/system-data.sql
+++ b/dao/src/test/resources/sql/system-data.sql
@@ -66,3 +66,5 @@ VALUES ( '6eaaefa6-4612-11e7-a919-92ebcb67fe33', 1592576748000 ,'13814000-1dd2-1
'{"type": "BURST", "batchSize": 1000}',
'{"type": "SKIP_ALL_FAILURES", "retries": 3, "failurePercentage": 0.0, "pauseBetweenRetries": 3, "maxPauseBetweenRetries": 3}'
);
+
+INSERT INTO tb_schema_settings (schema_version, product) VALUES (999999000000, 'CE');