diff --git a/extra/exports b/extra/exports
index 22439ee69f1bbaea585897b8f0dc526fe9e9e4b7..98fc8f1b92918d00a7266b81f39c2e82fcfd081d 100644
--- a/extra/exports
+++ b/extra/exports
@@ -636,3 +636,13 @@ lcpipe_flush_input
 lcpipe_new
 lcpipe_push
 lcpipe_push_now
+
+# picodata postgres protocol
+plain_iostream_create
+iostream_close
+coio_readn_ahead
+coio_read_ahead_timeout
+coio_write_timeout
+
+fiber_set_name_n
+authenticate
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9404c7f4a0d2cce56df55fa03b2494d380596dd4..fbf86da62d8bbf44197e1707a24d001018f1a5d1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -252,11 +252,15 @@ set(api_headers
     ${PROJECT_SOURCE_DIR}/src/lib/core/say.h
     ${PROJECT_SOURCE_DIR}/src/lib/core/fiber.h
     ${PROJECT_SOURCE_DIR}/src/lib/core/fiber_cond.h
+    ${PROJECT_SOURCE_DIR}/src/lib/core/iostream.h
+    ${PROJECT_SOURCE_DIR}/third_party/libev/ev.h
+    ${PROJECT_SOURCE_DIR}/third_party/tarantool_ev.h
     ${PROJECT_SOURCE_DIR}/src/lib/core/coio.h
     ${PROJECT_SOURCE_DIR}/src/lib/core/coio_task.h
     ${PROJECT_SOURCE_DIR}/src/box/ibuf.h
     ${PROJECT_SOURCE_DIR}/src/lua/utils.h
     ${PROJECT_SOURCE_DIR}/src/lua/error.h
+    ${PROJECT_SOURCE_DIR}/src/box/authentication.h
     ${PROJECT_SOURCE_DIR}/src/box/txn.h
     ${PROJECT_SOURCE_DIR}/src/box/tuple.h
     ${PROJECT_SOURCE_DIR}/src/box/key_def.h
@@ -273,6 +277,7 @@ set(api_headers
     ${PROJECT_SOURCE_DIR}/src/lib/core/clock.h
     ${PROJECT_SOURCE_DIR}/src/box/decimal.h
     ${PROJECT_SOURCE_DIR}/src/lua/decimal.h
+    ${PROJECT_SOURCE_DIR}/src/lib/core/random.h
     ${EXTRA_API_HEADERS}
 )
 rebuild_module_api(${api_headers})
diff --git a/src/box/authentication.h b/src/box/authentication.h
index a843a1b8cfd31d48dbeaef396789000cf2dbdd0d..c1f9ae86e5da91ed3ef47bd80d02c8a5ade7b709 100644
--- a/src/box/authentication.h
+++ b/src/box/authentication.h
@@ -222,6 +222,8 @@ bool
 authenticate_password(const struct authenticator *auth,
 		      const char *password, int password_len, const char *user);
 
+/** \cond public */
+
 /**
  * Authenticates a user.
  *
@@ -243,6 +245,8 @@ int
 authenticate(const char *user_name, uint32_t user_name_len,
 	     const char *salt, const char *tuple);
 
+/** \endcond public */
+
 /**
  * Checks if an authentication method may be used over an IO stream.
  *
diff --git a/src/lib/core/coio.h b/src/lib/core/coio.h
index ede6d262430309dbd3d5a18960dbc2eb45e45170..321ef76b187baebe28fd255ba404ad675b7a3743 100644
--- a/src/lib/core/coio.h
+++ b/src/lib/core/coio.h
@@ -59,10 +59,14 @@ int
 coio_accept(int sfd, struct sockaddr *addr, socklen_t addrlen,
 	    ev_tstamp timeout);
 
+/** \cond public */
+
 ssize_t
 coio_read_ahead_timeout(struct iostream *io, void *buf, size_t sz,
 			size_t bufsiz, ev_tstamp timeout);
 
+/** \endcond public */
+
 static inline void
 coio_timeout_init(ev_tstamp *start, ev_tstamp *delay,
 		  ev_tstamp timeout)
@@ -76,6 +80,8 @@ coio_timeout_update(ev_tstamp *start, ev_tstamp *delay)
 	return evio_timeout_update(loop(), start, delay);
 }
 
+/** \cond public */
+
 /**
  * Reat at least sz bytes, with readahead.
  *
@@ -108,6 +114,8 @@ coio_readn(struct iostream *io, void *buf, size_t sz)
 	return coio_readn_ahead(io, buf, sz, sz);
 }
 
+/** \endcond public */
+
 ssize_t
 coio_readn_ahead_timeout(struct iostream *io, void *buf, size_t sz,
 			 size_t bufsiz, ev_tstamp timeout);
@@ -118,6 +126,8 @@ coio_readn_timeout(struct iostream *io, void *buf, size_t sz, ev_tstamp timeout)
 	return coio_readn_ahead_timeout(io, buf, sz, sz, timeout);
 }
 
+/** \cond public */
+
 ssize_t
 coio_write_timeout(struct iostream *io, const void *buf, size_t sz,
 		   ev_tstamp timeout);
@@ -128,6 +138,8 @@ coio_write(struct iostream *io, const void *buf, size_t sz)
 	coio_write_timeout(io, buf, sz, TIMEOUT_INFINITY);
 }
 
+/** \endcond public */
+
 ssize_t
 coio_writev_timeout(struct iostream *io, struct iovec *iov, int iovcnt,
 		    size_t size, ev_tstamp timeout);
diff --git a/src/lib/core/fiber.h b/src/lib/core/fiber.h
index 0376735196870e659483d6d7787ada34d2a9d707..c3f80686a8ac58b1ec0661a698d090bd96910196 100644
--- a/src/lib/core/fiber.h
+++ b/src/lib/core/fiber.h
@@ -970,6 +970,8 @@ fiber_signal_reset(void);
 void
 fiber_set_name(struct fiber *fiber, const char *name);
 
+/** \cond public */
+
 /**
  * Set fiber name providing a length for it.
  * @param fiber Fiber to set name for.
@@ -979,6 +981,8 @@ fiber_set_name(struct fiber *fiber, const char *name);
 void
 fiber_set_name_n(struct fiber *fiber, const char *name, uint32_t len);
 
+/** \endcond public */
+
 static inline const char *
 fiber_name(struct fiber *f)
 {
diff --git a/src/lib/core/iostream.h b/src/lib/core/iostream.h
index 822d0c8d4c592414d1f27048c73a143a8ba73b06..760c6912310c349b0739629bb8c96ead475d365d 100644
--- a/src/lib/core/iostream.h
+++ b/src/lib/core/iostream.h
@@ -106,6 +106,8 @@ struct iostream_vtab {
 	(*writev)(struct iostream *io, const struct iovec *iov, int iovcnt);
 };
 
+/** \cond public */
+
 /**
  * An IO stream implements IO operations over a file descriptor.
  * Can be used to add some data processing transparently to the user.
@@ -175,6 +177,8 @@ plain_iostream_create(struct iostream *io, int fd);
 void
 iostream_close(struct iostream *io);
 
+/** \endcond public */
+
 /**
  * Destroys a stream without closing fd. The stream fd is set to -1.
  */
diff --git a/src/lib/core/random.h b/src/lib/core/random.h
index 66ef70f2f225bb8fb30c5396b3fab142f7f621bf..6183de74815ff3b91b5625a09b135fb2d865729d 100644
--- a/src/lib/core/random.h
+++ b/src/lib/core/random.h
@@ -43,9 +43,13 @@ random_init(void);
 void
 random_free(void);
 
+/** \cond public */
+
 void
 random_bytes(char *buf, size_t size);
 
+/** \endcond public */
+
 /**
  * Just 8 random_bytes().
  */
diff --git a/src/module_header.h b/src/module_header.h
index 017ea05ec37e860fc69348a304e933ad2fe06e10..e19ee797fa74c5138a81bcc79752f68662f5b7b7 100644
--- a/src/module_header.h
+++ b/src/module_header.h
@@ -43,6 +43,7 @@
 #include <stdbool.h>
 #include <stdio.h> /* ssize_t for Apple */
 #include <sys/types.h> /* ssize_t */
+#include <assert.h>
 
 #if defined(__cplusplus)
 extern "C" {
diff --git a/third_party/libev/ev.h b/third_party/libev/ev.h
index 54a8bc0d69fb4fd55f23111225fd915b80937174..97151d4c60ecfa909a05fa7588cff95e03de0ca5 100644
--- a/third_party/libev/ev.h
+++ b/third_party/libev/ev.h
@@ -156,11 +156,15 @@ EV_CPP(extern "C" {)
 
 /*****************************************************************************/
 
+/** \cond public */
+
 #ifndef EV_TSTAMP_T
 # define EV_TSTAMP_T double
 #endif
 typedef EV_TSTAMP_T ev_tstamp;
 
+/** \endcond public */
+
 #include <string.h> /* for memmove */
 
 #ifndef EV_ATOMIC_T
@@ -875,4 +879,3 @@ EV_API_DECL void ev_async_send     (EV_P_ ev_async *w) EV_NOEXCEPT;
 EV_CPP(})
 
 #endif
-
diff --git a/third_party/tarantool_ev.h b/third_party/tarantool_ev.h
index 2ed031f8d68606289883b55c0a19791baf902d73..53efb6f0e8e22e36bfb039911f25a4741f69a1b0 100644
--- a/third_party/tarantool_ev.h
+++ b/third_party/tarantool_ev.h
@@ -63,8 +63,12 @@
 extern "C" {
 #endif /* defined(__cplusplus) */
 
+/** \cond public */
+
 extern const ev_tstamp TIMEOUT_INFINITY;
 
+/** \endcond public */
+
 typedef void (*ev_io_cb)(ev_loop *, ev_io *, int);
 typedef void (*ev_async_cb)(ev_loop *, ev_async *, int);