Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision 2d66d66df4fdd568ae1d3ba78850058c55572590)
+++ src/routes/posts.js	(revision 33e1dbd11a4cb4638e01c26e3f3c98e352e8892e)
@@ -712,8 +712,10 @@
   const uri = (req.body.uri || '').toString();
   const text = (req.body.text || '').toString();
-  if (site && uri && text.trim()) {
+  const html = (req.body.content || '').toString();      // rich reply editor HTML (sanitized in deliverReply)
+  const language = (req.body.language || '').toString();
+  if (site && uri && (text.trim() || html.trim())) {
     // Resolve + deliver in the background so Send responds instantly.
     ActivityPubService.resolveRemoteNote(uri)
-      .then((parent) => parent && ActivityPubService.deliverReply(site, { postId: parent.localPostId || '', postSlug: null, parent, text }))
+      .then((parent) => parent && ActivityPubService.deliverReply(site, { postId: parent.localPostId || '', postSlug: null, parent, text, html, language }))
       .catch((e) => console.warn('[AP] remote reply failed:', e.message));
   }
@@ -1257,7 +1259,11 @@
   const parent = ActivityPubService.getInteractionById(req.body.interaction_id);
   const text = (req.body.text || '').toString();
-  if (parent && parent.post_id === post.id && text.trim()) {
+  const html = (req.body.content || '').toString();      // rich reply editor HTML (sanitized in deliverReply)
+  if (parent && parent.post_id === post.id && (text.trim() || html.trim())) {
     try {
-      await ActivityPubService.deliverReply(site, { postId: post.id, postSlug: post.slug, parent, text });
+      await ActivityPubService.deliverReply(site, {
+        postId: post.id, postSlug: post.slug, parent, text, html,
+        language: (req.body.language || '').toString(),
+      });
     } catch (e) { console.warn('[AP] reply send failed:', e.message); }
   }
