diff --git a/bridge/api/api.go b/bridge/api/api.go
index 9e7679d3..c0bef0e2 100644
--- a/bridge/api/api.go
+++ b/bridge/api/api.go
@@ -1,6 +1,7 @@
 package api
 
 import (
+	"encoding/base64"
 	"encoding/json"
 	"net/http"
 	"sync"
@@ -12,6 +13,7 @@ import (
 	"github.com/42wim/matterbridge/bridge/config"
 	"github.com/labstack/echo/v4"
 	"github.com/labstack/echo/v4/middleware"
+	"github.com/mitchellh/mapstructure"
 	ring "github.com/zfjagann/golang-ring"
 )
 
@@ -137,6 +139,15 @@ func (b *API) handlePostMessage(c echo.Context) error {
 	message.Account = b.Account
 	message.ID = ""
 	message.Timestamp = time.Now()
+	for i, f := range message.Extra["file"] {
+		fi := config.FileInfo{}
+		mapstructure.Decode(f.(map[string]interface{}), &fi)
+		var data []byte
+		// mapstructure doesn't decode base64 into []byte, so it must be done manually for fi.Data
+		data, _ = base64.StdEncoding.DecodeString(f.(map[string]interface{})["Data"].(string))
+		fi.Data = &data
+		message.Extra["file"][i] = fi
+	}
 	b.Log.Debugf("Sending message from %s on %s to gateway", message.Username, "api")
 	b.Remote <- message
 	return c.JSON(http.StatusOK, message)