diff --git a/src/api/mod.rs b/src/api/mod.rs
index 67dc017..3f3b9af 100644
--- a/src/api/mod.rs
+++ b/src/api/mod.rs
@@ -1,2 +1,3 @@
 pub mod user;
-pub mod history;
\ No newline at end of file
+pub mod history;
+pub mod tts;
\ No newline at end of file
diff --git a/src/api/tts.rs b/src/api/tts.rs
new file mode 100644
index 0000000..d9842d2
--- /dev/null
+++ b/src/api/tts.rs
@@ -0,0 +1,18 @@
+use crate::{elevenlabs_api::ElevenLabsAPI, model::{history::AudioItem, error::{HTTPValidationError, APIError}}};
+
+
+
+impl ElevenLabsAPI {
+    pub async fn generate_tts(&self, voice_id: String, text: String) -> Result<AudioItem, APIError> {
+        let response = self.post(crate::elevenlabs_api::tts::POST::File { voice_id })?.json(&text).send().await?;
+
+        if response.status().is_success() {
+            Ok(AudioItem::new_single(response.bytes().await?))
+        } else {
+            let error: HTTPValidationError = response.json().await?;
+            Err(APIError::HTTPError(error))
+        }
+    }
+
+    // TODO: Consider stream implementation
+}
\ No newline at end of file