diff --git a/doc/Makefile.am b/doc/Makefile.am
index dca8fed..66e8aa3 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -47,6 +47,7 @@
     $(srcdir)/images/ot-contrib-synopsys.png      \
     $(srcdir)/images/ot-contrib-ti.png            \
     $(srcdir)/images/ot-contrib-zephyr.png        \
+    $(srcdir)/ot_api_doc.h                        \
     $(NULL)
 
 #
@@ -77,6 +78,9 @@
 
 if OPENTHREAD_BUILD_DOCS
 
+openthreaddir = $(includedir)/openthread
+dist_openthread_HEADERS = ot_api_doc.h
+
 all-local: html/index.html
 
 #
diff --git a/doc/ot_api_doc.h b/doc/ot_api_doc.h
new file mode 100644
index 0000000..bfec2cd
--- /dev/null
+++ b/doc/ot_api_doc.h
@@ -0,0 +1,164 @@
+/*
+ *  Copyright (c) 2020, The OpenThread Authors.
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *  3. Neither the name of the copyright holder nor the
+ *     names of its contributors may be used to endorse or promote products
+ *     derived from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ *  POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @file
+ * @brief
+ *  This file defines the Doxygen group structure for OpenThread documentation.
+ */
+
+/**
+ * @defgroup api  API
+ * @brief
+ *   This module includes the application programming interface to the OpenThread stack.
+ *
+ * @{
+ *
+ * @defgroup api-error Error
+ *
+ * @defgroup api-execution Execution
+ *
+ * @{
+ *
+ * @defgroup api-instance Instance
+ * @defgroup api-tasklets Tasklets
+ *
+ * @}
+ *
+ * @defgroup api-net IPv6 Networking
+ * @{
+ *
+ * @defgroup api-dns         DNSv6
+ * @defgroup api-icmp6       ICMPv6
+ * @defgroup api-ip6         IPv6
+ * @defgroup api-udp-group   UDP
+ *
+ * @{
+ *
+ * @defgroup api-udp         UDP
+ * @defgroup api-udp-forward UDP Forward
+ *
+ * @}
+ *
+ * @}
+ *
+ * @defgroup api-link Link
+ *
+ * @{
+ *
+ * @defgroup api-link-link Link
+ * @defgroup api-link-raw  Raw Link
+ *
+ * @}
+ *
+ * @defgroup api-message Message
+ *
+ * @defgroup api-thread Thread
+ *
+ * @{
+ *
+ * @defgroup api-border-agent   Border Agent
+ * @defgroup api-border-router  Border Router
+ * @defgroup api-commissioner   Commissioner
+ * @defgroup api-thread-general General
+ * @brief This module includes functions for all Thread roles.
+ * @defgroup api-joiner         Joiner
+ * @defgroup api-thread-router  Router/Leader
+ * @brief This module includes functions for Thread Routers and Leaders.
+ * @defgroup api-server         Server
+ *
+ * @}
+ *
+ * @defgroup api-addons Add-Ons
+ *
+ * @{
+ *
+ * @defgroup api-channel-manager     Channel Manager
+ * @defgroup api-channel-monitor     Channel Monitoring
+ * @defgroup api-child-supervision   Child Supervision
+ * @defgroup api-coap-group          CoAP
+ *
+ * @{
+ *
+ * @defgroup api-coap                CoAP
+ * @defgroup api-coap-secure         CoAP Secure
+ *
+ * @}
+ *
+ * @defgroup api-cli                 Command Line Interface
+ * @defgroup api-crypto              Crypto
+ * @defgroup api-entropy             Entropy Source
+ * @defgroup api-factory-diagnostics Factory Diagnostics
+ * @defgroup api-heap                Heap
+ * @defgroup api-jam-detection       Jam Detection
+ * @defgroup api-logging             Logging
+ * @defgroup api-ncp                 Network Co-Processor
+ * @defgroup api-network-time        Network Time Synchronization
+ * @defgroup api-random-group        Random Number Generator
+ *
+ * @{
+ *
+ * @defgroup api-random-crypto       RNG Cryptographic
+ * @defgroup api-random-non-crypto   RNG Non-cryptographic
+ *
+ * @}
+ *
+ * @defgroup api-sntp                SNTP
+ *
+ * @}
+ *
+ * @}
+ *
+ */
+
+/**
+ * @defgroup platform  Platform Abstraction
+ * @brief
+ *   This module includes the platform abstraction used by the OpenThread stack.
+ *
+ * @{
+ *
+ * @defgroup plat-alarm               Alarm
+ * @defgroup plat-ble                 BLE Host
+ * @defgroup plat-entropy             Entropy
+ * @defgroup plat-factory-diagnostics Factory Diagnostics
+ * @defgroup plat-logging             Logging
+ * @defgroup plat-memory              Memory
+ * @defgroup plat-messagepool         Message Pool
+ * @defgroup plat-misc                Miscellaneous
+ * @defgroup plat-radio               Radio
+ * @defgroup plat-settings            Settings
+ * @defgroup plat-spi-slave           SPI Slave
+ * @defgroup plat-time                Time Service
+ * @defgroup plat-toolchain           Toolchain
+ * @defgroup plat-uart                UART
+ *
+ * @}
+ *
+ */
+
diff --git a/include/openthread/error.h b/include/openthread/error.h
index 3d7b749..e1019a2 100644
--- a/include/openthread/error.h
+++ b/include/openthread/error.h
@@ -42,136 +42,6 @@
 #endif
 
 /**
- * @defgroup api  API
- * @brief
- *   This module includes the application programming interface to the OpenThread stack.
- *
- * @{
- *
- * @defgroup api-error Error
- *
- * @defgroup api-execution Execution
- *
- * @{
- *
- * @defgroup api-instance Instance
- * @defgroup api-tasklets Tasklets
- *
- * @}
- *
- * @defgroup api-net IPv6 Networking
- * @{
- *
- * @defgroup api-dns   DNSv6
- * @defgroup api-icmp6 ICMPv6
- * @defgroup api-ip6   IPv6
- * @defgroup api-udp-group   UDP
- *
- * @{
- *
- * @defgroup api-udp         UDP
- * @defgroup api-udp-forward UDP Forward
- *
- * @}
- *
- * @}
- *
- * @defgroup api-link Link
- *
- * @{
- *
- * @defgroup api-link-link Link
- * @defgroup api-link-raw  Raw Link
- *
- * @}
- *
- * @defgroup api-message Message
- *
- * @defgroup api-thread Thread
- *
- * @{
- *
- * @defgroup api-border-agent   Border Agent
- * @defgroup api-border-router  Border Router
- * @defgroup api-commissioner   Commissioner
- * @defgroup api-thread-general General
- * @brief This module includes functions for all Thread roles.
- * @defgroup api-joiner         Joiner
- * @defgroup api-thread-router  Router/Leader
- * @brief This module includes functions for Thread Routers and Leaders.
- * @defgroup api-server         Server
- *
- * @}
- *
- * @defgroup api-addons Add-Ons
- *
- * @{
- *
- * @defgroup api-channel-manager     Channel Manager
- * @defgroup api-channel-monitor     Channel Monitoring
- * @defgroup api-child-supervision   Child Supervision
- * @defgroup api-coap-group          CoAP
- *
- * @{
- *
- * @defgroup api-coap                CoAP
- * @defgroup api-coap-secure         CoAP Secure
- *
- * @}
- *
- * @defgroup api-cli                 Command Line Interface
- * @defgroup api-crypto              Crypto
- * @defgroup api-entropy             Entropy Source
- * @defgroup api-factory-diagnostics Factory Diagnostics
- * @defgroup api-heap                Heap
- * @defgroup api-jam-detection       Jam Detection
- * @defgroup api-logging             Logging
- * @defgroup api-ncp                 Network Co-Processor
- * @defgroup api-network-time        Network Time Synchronization
- * @defgroup api-random-group        Random Number Generator
- *
- * @{
- *
- * @defgroup api-random-crypto       RNG Cryptographic
- * @defgroup api-random-non-crypto   RNG Non-cryptographic
- *
- * @}
- *
- * @defgroup api-sntp                SNTP
- *
- * @}
- *
- * @}
- *
- */
-
-/**
- * @defgroup platform  Platform Abstraction
- * @brief
- *   This module includes the platform abstraction used by the OpenThread stack.
- *
- * @{
- *
- * @defgroup plat-alarm               Alarm
- * @defgroup plat-ble                 BLE Host
- * @defgroup plat-entropy             Entropy
- * @defgroup plat-factory-diagnostics Factory Diagnostics
- * @defgroup plat-logging             Logging
- * @defgroup plat-memory              Memory
- * @defgroup plat-messagepool         Message Pool
- * @defgroup plat-misc                Miscellaneous
- * @defgroup plat-radio               Radio
- * @defgroup plat-settings            Settings
- * @defgroup plat-spi-slave           SPI Slave
- * @defgroup plat-time                Time Service
- * @defgroup plat-toolchain           Toolchain
- * @defgroup plat-uart                UART
- *
- * @}
- *
- */
-
-/**
  * @addtogroup api-error
  *
  * @brief
