diff --git a/import.py b/import.py
index 27fd4ace8caa547e160f666ca0831d5476718737..424c47a9788b59c075ab52820baca19812727742 100644
--- a/import.py
+++ b/import.py
@@ -3,7 +3,7 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-from typing import Dict, TypedDict
+from typing import Dict, TypedDict, Optional
 from io import BytesIO
 import argparse
 import os.path
@@ -75,6 +75,8 @@ class MatrixMediaInfo(TypedDict):
     h: int
     size: int
     mimetype: str
+    thumbnail_url: Optional[str]
+    thumbnail_info: Optional['MatrixMediaInfo']
 
 
 class MatrixStickerInfo(TypedDict, total=False):
@@ -122,6 +124,7 @@ async def reupload_document(client: TelegramClient, document: Document) -> Matri
                 "w": width,
                 "h": height,
                 "size": len(data),
+                "mimetype": "image/png",
             },
         },
     }
diff --git a/web/widget-api.js b/web/widget-api.js
index 556537fa7e8131b280fd8e076fe94b6464d8e571..6d81107f0620b0b3e31d2e311b1fb87f71fb8e51 100644
--- a/web/widget-api.js
+++ b/web/widget-api.js
@@ -34,14 +34,28 @@ window.onmessage = event => {
 }
 
 export function sendSticker(content) {
+	const data = {
+		content,
+		// `name` is for Element Web (and also the spec)
+		// Element Android uses content -> body as the name
+		name: content.body,
+	}
+
+	// This is for Element iOS
+	const widgetData = {
+		...data,
+		description: content.body,
+		file: `${content["net.maunium.telegram.sticker"].id}.png`,
+	}
+	// Element iOS explodes if there are extra fields present
+	delete widgetData.content["net.maunium.telegram.sticker"]
+
 	window.parent.postMessage({
 		api: "fromWidget",
 		action: "m.sticker",
 		requestId: `sticker-${Date.now()}`,
 		widgetId,
-		data: {
-			name: content.body,
-			content,
-		},
+		data,
+		widgetData,
 	}, "*")
 }