diff --git a/docs/API.md b/docs/API.md
index 1eadcb7645593a4cc93fab6700a9118778f8c69c..125bd16b7cc6617622e1995efcaff1d1d5d71f0f 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -169,6 +169,15 @@ a response body.  Mongoose provides functions for all three parts:
      send data in pieces by saving state in
      `struct mg_connection::connection_param` variable and returning `0`. Then
      Mongoose will call a handler repeatedly after each socket write.
+     
+     void mg_send_file(struct mg_connection *, const char *path);
+     
+Signals Mongoose to serve given file. Mongoose handles file according to
+it's extensions, i.e. Mongoose will invoke CGI script if `path` has CGI
+extension, it'll render SSI file if `path` has SSI extension, etc. If `path`
+points to a directory, Mongoose will show directory listing. If this function
+is used, no calls to `mg_send*` or `mg_printf*` functions must be made, and
+event handler must return `MG_MORE`.
 
 <!-- -->
 
diff --git a/mongoose.h b/mongoose.h
index fc431886da4c283f71823d7a9b8664e7028604fd..5f879a9e21bbd90069f94081235e1f95338cb8df 100644
--- a/mongoose.h
+++ b/mongoose.h
@@ -108,6 +108,8 @@ size_t mg_websocket_write(struct mg_connection *, int opcode,
                           const char *data, size_t data_len);
 size_t mg_websocket_printf(struct mg_connection* conn, int opcode,
                            const char *fmt, ...);
+                           
+void mg_send_file(struct mg_connection *, const char *path);
 
 const char *mg_get_header(const struct mg_connection *, const char *name);
 const char *mg_get_mime_type(const char *name, const char *default_mime_type);
@@ -120,7 +122,6 @@ int mg_parse_multipart(const char *buf, int buf_len,
                        const char **data, int *data_len);
 
 // Utility functions
-void mg_send_file(struct mg_connection *, const char *path);
 void *mg_start_thread(void *(*func)(void *), void *param);
 char *mg_md5(char buf[33], ...);
 int mg_authorize_digest(struct mg_connection *c, FILE *fp);