diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedApi.kt b/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedApi.kt
new file mode 100644
index 0000000000000000000000000000000000000000..899ff8f5975ed947e0c76747ac6502f486a1ff1a
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedApi.kt
@@ -0,0 +1,10 @@
+package de.kuschku.quasseldroid.util.embed
+
+import io.reactivex.Observable
+import retrofit2.http.GET
+import retrofit2.http.Query
+
+interface EmbedApi {
+  @GET()
+  fun embedData(@Query("url") url: String): Observable<EmbedResponse>
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..472e5aef71186061fc4ab91e1bcb3ea1cb663870
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedHelper.kt
@@ -0,0 +1,16 @@
+package de.kuschku.quasseldroid.util.embed
+
+import com.google.gson.GsonBuilder
+import io.reactivex.Observable
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+
+class EmbedHelper(baseUrl: String) {
+  private val api = Retrofit.Builder()
+    .baseUrl(baseUrl)
+    .addConverterFactory(GsonConverterFactory.create(GsonBuilder().setLenient().create()))
+    .build()
+    .create(EmbedApi::class.java)
+
+  fun embedCode(url: String): Observable<EmbedResponse> = api.embedData(url)
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedResponse.kt b/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedResponse.kt
new file mode 100644
index 0000000000000000000000000000000000000000..ec45c32e166bd3a097191e5c2f26c082d8da3a93
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/embed/EmbedResponse.kt
@@ -0,0 +1,7 @@
+package de.kuschku.quasseldroid.util.embed
+
+data class EmbedResponse(
+  val result: Boolean,
+  val type: String,
+  val code: String
+)
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt
index 773111d6608c06f3c4e914fe507aa744d4954136..c348fc30c528d53e88371788255af782f6791e2c 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/FormattedMessage.kt
@@ -32,6 +32,7 @@ class FormattedMessage(
   val fallbackDrawable: Drawable? = null,
   val realName: CharSequence? = null,
   val avatarUrls: List<Avatar> = emptyList(),
+  val urls: List<String> = emptyList(),
   val hasDayChange: Boolean,
   val isSelected: Boolean,
   val isExpanded: Boolean,
@@ -51,6 +52,7 @@ class FormattedMessage(
     if (combined != other.combined) return false
     if (realName != other.realName) return false
     if (avatarUrls != other.avatarUrls) return false
+    if (urls != other.urls) return false
     if (hasDayChange != other.hasDayChange) return false
     if (isSelected != other.isSelected) return false
     if (isExpanded != other.isExpanded) return false
@@ -68,6 +70,7 @@ class FormattedMessage(
     result = 31 * result + combined.hashCode()
     result = 31 * result + (realName?.hashCode() ?: 0)
     result = 31 * result + avatarUrls.hashCode()
+    result = 31 * result + urls.hashCode()
     result = 31 * result + hasDayChange.hashCode()
     result = 31 * result + isSelected.hashCode()
     result = 31 * result + isExpanded.hashCode()