<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fabrizio Ferrari</title>
    <description>The latest articles on DEV Community by Fabrizio Ferrari (@infinistrategy).</description>
    <link>https://dev.to/infinistrategy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4093034%2F3e149ae2-4d26-4500-9849-d07744fc1b82.jpg</url>
      <title>DEV Community: Fabrizio Ferrari</title>
      <link>https://dev.to/infinistrategy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/infinistrategy"/>
    <language>en</language>
    <item>
      <title>DaDaScribe API: YouTube Multi-Language Transcript + SRT in One Request</title>
      <dc:creator>Fabrizio Ferrari</dc:creator>
      <pubDate>Mon, 24 Aug 2026 23:41:03 +0000</pubDate>
      <link>https://dev.to/infinistrategy/dadascribe-api-youtube-multi-language-transcript-srt-in-one-request-4efk</link>
      <guid>https://dev.to/infinistrategy/dadascribe-api-youtube-multi-language-transcript-srt-in-one-request-4efk</guid>
      <description>&lt;p&gt;Most transcription APIs still force you to do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the YouTube video&lt;/li&gt;
&lt;li&gt;Extract the audio with yt-dlp + ffmpeg&lt;/li&gt;
&lt;li&gt;Upload the file&lt;/li&gt;
&lt;li&gt;Call the transcription endpoint&lt;/li&gt;
&lt;li&gt;Call a separate translation API&lt;/li&gt;
&lt;li&gt;Map generic speaker labels ("Speaker 0") to real names&lt;/li&gt;
&lt;li&gt;Generate SRT files yourself&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s a lot of moving parts for something that should be simple.&lt;/p&gt;

&lt;p&gt;The DaDaScribe API collapses most of that into a single request.&lt;/p&gt;

&lt;p&gt;You send a YouTube URL (or a direct audio/video link), specify the source language, optionally add up to 5 target languages + speaker names, and you get back clean .txt transcripts and .srt subtitle files, including translations. Of course, you can also directly upload an audio or video file.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Quick Start&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the minimal flow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Submit a transcription job&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash
curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.dadascribe.com/v1/transcribe &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "source": "https://www.youtube.com/watch?v=VIDEO_ID",
    "source-language": "en",
    "destination-language": "es,fr,it",
    "diarization": "Lex,Guest"
  }
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a1B2c3D4e5F6g7H8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Poll for status&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.dadascribe.com/v1/status &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_API_KEY"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"id": "a1B2c3D4e5F6g7H8"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Download the results&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When status is "complete", you get direct URLs to the .txt and .srt files (including translated versions). No auth header required on the download.&lt;/p&gt;

&lt;p&gt;Here is the Python version of the same flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.dadascribe.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Submit
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/transcribe&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.youtube.com/watch?v=VIDEO_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source-language&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;en&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;destination-language&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;es,fr&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;diarization&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Host,Guest&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;job_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Poll
&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;/status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;job_id&lt;/span&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;complete&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urls&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What Actually Makes This Useful
&lt;/h2&gt;

&lt;p&gt;Here are the features that remove real work from a developer’s pipeline:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;DaDaScribe&lt;/th&gt;
&lt;th&gt;Typical Alternatives&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;YouTube URL as input&lt;/td&gt;
&lt;td&gt;First-class&lt;/td&gt;
&lt;td&gt;Usually requires extraction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in translation&lt;/td&gt;
&lt;td&gt;Over 120 languages&lt;/td&gt;
&lt;td&gt;Separate API call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Named speaker diarization&lt;/td&gt;
&lt;td&gt;You provide the names&lt;/td&gt;
&lt;td&gt;Generic "Speaker 0/1"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pre-processing pipeline&lt;/td&gt;
&lt;td&gt;Noise reduction + cleanup&lt;/td&gt;
&lt;td&gt;You handle it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output formats&lt;/td&gt;
&lt;td&gt;.txt + .srt&lt;/td&gt;
&lt;td&gt;Often JSON only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Number of core endpoints&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Usually many more&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The pre-processing step is particularly important. Before the speech model ever sees the audio, DaDaScribe runs noise reduction and voice isolation. This is why it handles music (lyrics extraction) and messy real-world recordings better than raw model APIs.&lt;/p&gt;

&lt;p&gt;You can see the difference in the &lt;a href="https://www.dadascribe.com/demos/beyonc-halo_1.html" rel="noopener noreferrer"&gt;Beyoncé "Halo" lyrics demo&lt;/a&gt; and the long-form &lt;a href="https://www.dadascribe.com/demos/" rel="noopener noreferrer"&gt;Lex Fridman podcast&lt;/a&gt; examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Compares to the Big Three (Short Version)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Whisper API&lt;/strong&gt;: Excellent model, but no native YouTube support, limited translation (mostly into English), and no built-in diarization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deepgram / AssemblyAI&lt;/strong&gt;: Strong on streaming and accuracy benchmarks. You still need to handle YouTube extraction and translation yourself. Speaker labels are generic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DaDaScribe&lt;/strong&gt;: Opinionated toward content pipelines (YouTube, podcasts, multi-language output). Batch-only (no real-time streaming yet). Fewer endpoints, more built-in conveniences.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full side-by-side comparison (pricing models, retention policy, feature matrix, etc.) is here: &lt;a href="https://www.dadascribe.com/learn/dadascribe-api-vs-the-big-three-a-developer-s-guide-to-choosing-a-transcription-api-in-2026/" rel="noopener noreferrer"&gt;DaDaScribe API vs the Big Three&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  When You Should Use It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Good fit if you are building:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;YouTube / podcast content pipelines&lt;/li&gt;
&lt;li&gt;Multi-language subtitle generation&lt;/li&gt;
&lt;li&gt;Tools that need named speakers without post-processing&lt;/li&gt;
&lt;li&gt;Anything where reducing the number of external services matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Less ideal if you need:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time / streaming transcription&lt;/li&gt;
&lt;li&gt;The absolute lowest possible per-minute cost at very high volume&lt;/li&gt;
&lt;li&gt;Extremely specialized domain models (medical, legal) right now&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;API documentation: &lt;a href="https://api.dadascribe.com/" rel="noopener noreferrer"&gt;https://api.dadascribe.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Python wrapper: &lt;a href="https://github.com/PatzEdi/dadascribe-api-python" rel="noopener noreferrer"&gt;https://github.com/PatzEdi/dadascribe-api-python&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create an API key from your &lt;a href="https://www.dadascribe.com/" rel="noopener noreferrer"&gt;DaDaScribe account&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The API is currently in v1. Feedback from developers is welcome,  especially around edge cases and missing features.&lt;/p&gt;

&lt;p&gt;Please post your comments or questions below; I'll be happy to answer them personally!&lt;/p&gt;




&lt;p&gt;Originally published in more detail on the &lt;a href="https://www.dadascribe.com/learn/dadascribe-api-vs-the-big-three-a-developer-s-guide-to-choosing-a-transcription-api-in-2026/" rel="noopener noreferrer"&gt;DaDaScribe Learning Center&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>automation</category>
      <category>whisper</category>
    </item>
  </channel>
</rss>
