<?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: OceanToken</title>
    <description>The latest articles on DEV Community by OceanToken (@oceantoken).</description>
    <link>https://dev.to/oceantoken</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%2F4236723%2F3bdaaa43-4364-44d1-87ba-5e172020a6cc.png</url>
      <title>DEV Community: OceanToken</title>
      <link>https://dev.to/oceantoken</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oceantoken"/>
    <language>en</language>
    <item>
      <title>DeepSeek V4.1 Flash spent 84% of my tokens thinking: real latency, real cost, and the settings that fix it</title>
      <dc:creator>OceanToken</dc:creator>
      <pubDate>Sun, 15 Nov 2026 07:26:39 +0000</pubDate>
      <link>https://dev.to/oceantoken/deepseek-v41-flash-spent-84-of-my-tokens-thinking-real-latency-real-cost-and-the-settings-that-3254</link>
      <guid>https://dev.to/oceantoken/deepseek-v41-flash-spent-84-of-my-tokens-thinking-real-latency-real-cost-and-the-settings-that-3254</guid>
      <description>&lt;p&gt;DeepSeek V4.1 Flash started streaming in &lt;strong&gt;1.2 seconds&lt;/strong&gt; on every run I made. It took &lt;strong&gt;20 seconds&lt;/strong&gt; to produce the first line of the code I asked for. In between, it wrote about 3,300 tokens of reasoning that I never saw, and paid for at the output rate.&lt;/p&gt;

&lt;p&gt;That gap matters more than any per-token price, so this post measures it, shows which settings change it, and works out what one answer actually costs at the official price and at ours.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I work on growth at &lt;a href="https://oceantoken.ai" rel="noopener noreferrer"&gt;OceanToken&lt;/a&gt;, an OpenAI-compatible API that resells DeepSeek, and I ran the tests there. The official prices come from &lt;a href="https://api-docs.deepseek.com/quick_start/pricing" rel="noopener noreferrer"&gt;DeepSeek's Models &amp;amp; Pricing page&lt;/a&gt;, with the date I read them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning is on by default and billed as output.&lt;/strong&gt; On a small coding prompt, 84% of V4.1 Flash's output tokens were reasoning.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;max_tokens: 800&lt;/code&gt;, Flash &lt;strong&gt;used the whole budget thinking and returned no code&lt;/strong&gt;, and the call was still billed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;reasoning_effort: "low"&lt;/code&gt; cut cost by &lt;strong&gt;37%&lt;/strong&gt; and time-to-answer by &lt;strong&gt;~45%&lt;/strong&gt;. &lt;code&gt;thinking: {type: "disabled"}&lt;/code&gt; did nothing in my runs.&lt;/li&gt;
&lt;li&gt;With a reasoning model, &lt;strong&gt;output price is what you pay for&lt;/strong&gt;: input was under 1% of the bill.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I tested
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prompt (68 input tokens)&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Write a Python function that parses an ISO-8601 duration string such as 'PT1H30M' into total seconds. Include 3 unit tests. Answer with code only.&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;deepseek/deepseek-v4.1-flash&lt;/code&gt;, &lt;code&gt;-v4.1-flash-1017&lt;/code&gt;, &lt;code&gt;deepseek/deepseek-v4-pro&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calls&lt;/td&gt;
&lt;td&gt;Streaming chat completions, OpenAI-compatible endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When / where&lt;/td&gt;
&lt;td&gt;Nov 14, 2026, 03:57–04:07 UTC, from New York&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metrics&lt;/td&gt;
&lt;td&gt;time to first token (any kind), time to first line of code, output tok/s, tokens, cost&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Round 1: V4.1 Flash, &lt;code&gt;max_tokens: 800&lt;/code&gt;, 5 runs per model
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;First token&lt;/th&gt;
&lt;th&gt;Output speed&lt;/th&gt;
&lt;th&gt;Total&lt;/th&gt;
&lt;th&gt;Output tokens&lt;/th&gt;
&lt;th&gt;Code returned?&lt;/th&gt;
&lt;th&gt;Cost / run&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;V4.1 Flash&lt;/td&gt;
&lt;td&gt;1.16 s&lt;/td&gt;
&lt;td&gt;171 tok/s&lt;/td&gt;
&lt;td&gt;5.8 s&lt;/td&gt;
&lt;td&gt;800, all reasoning&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.0007&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V4.1 Flash (1017)&lt;/td&gt;
&lt;td&gt;1.05 s&lt;/td&gt;
&lt;td&gt;171 tok/s&lt;/td&gt;
&lt;td&gt;5.8 s&lt;/td&gt;
&lt;td&gt;800, all reasoning&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.0007&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Medians of 5 runs. Cost = tokens × list price (OceanToken tier 1).&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Round 2: V4.1 Flash with room to finish
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;First token&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;First line of code&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;Total&lt;/th&gt;
&lt;th&gt;Output tokens&lt;/th&gt;
&lt;th&gt;Reasoning share&lt;/th&gt;
&lt;th&gt;Cost / answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Default, &lt;code&gt;max_tokens: 8000&lt;/code&gt; (3 runs)&lt;/td&gt;
&lt;td&gt;1.19 s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;20.4 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;22.7 s&lt;/td&gt;
&lt;td&gt;3,858&lt;/td&gt;
&lt;td&gt;84%&lt;/td&gt;
&lt;td&gt;$0.0033&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;thinking: {type: "disabled"}&lt;/code&gt; (3 runs)&lt;/td&gt;
&lt;td&gt;0.99 s&lt;/td&gt;
&lt;td&gt;19.1 s&lt;/td&gt;
&lt;td&gt;21.5 s&lt;/td&gt;
&lt;td&gt;4,092&lt;/td&gt;
&lt;td&gt;82%&lt;/td&gt;
&lt;td&gt;$0.0034&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;reasoning_effort: "low"&lt;/code&gt; (2 runs)&lt;/td&gt;
&lt;td&gt;1.03 s&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;11.1 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;13.2 s&lt;/td&gt;
&lt;td&gt;2,452&lt;/td&gt;
&lt;td&gt;75%&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.0021&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Output speed held at &lt;strong&gt;180–205 tok/s&lt;/strong&gt; across every Flash run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What surprised me
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Fast first token" means almost nothing for a reasoning model.&lt;/strong&gt; Every Flash run started streaming in about a second, but that first token was reasoning, not answer. For an interactive feature, measure time to the first &lt;em&gt;content&lt;/em&gt; token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Too small a &lt;code&gt;max_tokens&lt;/code&gt; wastes money.&lt;/strong&gt; At 800 tokens, Flash never left the thinking phase. You pay for 800 output tokens and get an empty &lt;code&gt;content&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;reasoning_effort: "low"&lt;/code&gt; is the setting that saves money.&lt;/strong&gt; It returned code in every run at 63% of the cost. I didn't grade answer quality, so check it on your own tasks before switching.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Did the bill match the price list?
&lt;/h2&gt;

&lt;p&gt;Yes, to the cent. OceanToken returns the charge in an &lt;code&gt;x-oceantoken-cost&lt;/code&gt; response header:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Call&lt;/th&gt;
&lt;th&gt;Tokens (in / out)&lt;/th&gt;
&lt;th&gt;Header&lt;/th&gt;
&lt;th&gt;tokens × list price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;V4.1 Flash&lt;/td&gt;
&lt;td&gt;68 / 300&lt;/td&gt;
&lt;td&gt;$0.0002663&lt;/td&gt;
&lt;td&gt;68 × $0.21/M + 300 × $0.84/M = $0.0002663&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V4 Pro&lt;/td&gt;
&lt;td&gt;121 / 2,967&lt;/td&gt;
&lt;td&gt;$0.009527&lt;/td&gt;
&lt;td&gt;121 × $1.056/M + 2,967 × $3.168/M = $0.009527&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Reasoning tokens are billed exactly like visible output tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Price list: official vs OceanToken
&lt;/h2&gt;

&lt;p&gt;Per 1M tokens. Official prices from &lt;a href="https://api-docs.deepseek.com/quick_start/pricing" rel="noopener noreferrer"&gt;DeepSeek's Models &amp;amp; Pricing page&lt;/a&gt; (read Nov 13, 2026); OceanToken prices read Nov 14, 2026.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Official&lt;/th&gt;
&lt;th&gt;OceanToken tier 1&lt;/th&gt;
&lt;th&gt;OceanToken tier 3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://oceantoken.ai/models/deepseek/deepseek-v4.1-flash" rel="noopener noreferrer"&gt;V4.1 Flash&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$0.30&lt;/td&gt;
&lt;td&gt;$0.21&lt;/td&gt;
&lt;td&gt;$0.18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$1.20&lt;/td&gt;
&lt;td&gt;$0.84&lt;/td&gt;
&lt;td&gt;$0.72&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V4 Pro&lt;/td&gt;
&lt;td&gt;Input&lt;/td&gt;
&lt;td&gt;$1.32&lt;/td&gt;
&lt;td&gt;$1.056&lt;/td&gt;
&lt;td&gt;$0.792&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Output&lt;/td&gt;
&lt;td&gt;$3.96&lt;/td&gt;
&lt;td&gt;$3.168&lt;/td&gt;
&lt;td&gt;$2.376&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Tier 1 applies from your first top-up; tier 3 is the top-up tier with the lowest price. Same price at any hour of the day.&lt;/p&gt;

&lt;p&gt;The legacy names &lt;code&gt;deepseek-v4-flash&lt;/code&gt; and &lt;code&gt;deepseek-v4-flash-vision-exp&lt;/code&gt; still work on DeepSeek's API; they route to V4.1 Flash 1017 at the same price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same answer at each price
&lt;/h2&gt;

&lt;p&gt;The median Round 2 answer (68 in / 3,858 out):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Cost per answer&lt;/th&gt;
&lt;th&gt;Per 1,000 answers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Official&lt;/td&gt;
&lt;td&gt;$0.0047&lt;/td&gt;
&lt;td&gt;$4.65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OceanToken tier 1&lt;/td&gt;
&lt;td&gt;$0.0033&lt;/td&gt;
&lt;td&gt;$3.26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OceanToken tier 3&lt;/td&gt;
&lt;td&gt;$0.0028&lt;/td&gt;
&lt;td&gt;$2.79&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OceanToken tier 1, &lt;code&gt;reasoning_effort: "low"&lt;/code&gt; (2,452 out)&lt;/td&gt;
&lt;td&gt;$0.0021&lt;/td&gt;
&lt;td&gt;$2.07&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The last row is the point of this post: the setting saves more than any price difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  The code I used
&lt;/h2&gt;



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

&lt;span class="no"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://api.oceantoken.ai/v1"&lt;/span&gt;   &lt;span class="c1"&gt;# or any OpenAI-compatible endpoint, e.g. https://api.deepseek.com&lt;/span&gt;
&lt;span class="no"&gt;H&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"Bearer {KEY}"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"stream"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"max_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"stream_options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"include_usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s2"&gt;"messages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"user"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;PROMPT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;t0&lt;/span&gt; &lt;span class="o"&gt;=&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;perf_counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;first_code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
    &lt;span class="k"&gt;with&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="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"{BASE}/chat/completions"&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="no"&gt;H&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="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iter_lines&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;"data:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="s2"&gt;"[DONE]"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;
            &lt;span class="n"&gt;ev&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;loads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"choices"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"delta"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"reasoning_content"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&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;perf_counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t0&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;first_code&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;first_code&lt;/span&gt; &lt;span class="o"&gt;=&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;perf_counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t0&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;first_code&lt;/span&gt;&lt;span class="p"&gt;,&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;perf_counter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;t0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"deepseek/deepseek-v4.1-flash"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;reasoning_effort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"low"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Point &lt;code&gt;BASE&lt;/code&gt; at two endpoints in the same hour and you have your own comparison.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I could not determine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Other endpoints' latency on my prompt.&lt;/strong&gt; I only measured one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time of day.&lt;/strong&gt; All runs were in one 10-minute window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More than one prompt.&lt;/strong&gt; One small coding task; longer prompts shift the input/output split.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answer quality.&lt;/strong&gt; I measured speed and cost, not whether each answer's code was correct.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does DeepSeek V4.1 Flash cost?&lt;/strong&gt;&lt;br&gt;
The official price is $0.30 input / $1.20 output per 1M tokens. On OceanToken it is $0.21 / $0.84 from the first top-up, down to $0.18 / $0.72 at the top tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is my DeepSeek bill higher than the token count I expected?&lt;/strong&gt;&lt;br&gt;
Reasoning tokens. They're billed as output, and in my test they were 75–84% of output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I make DeepSeek V4.1 Flash cheaper and faster?&lt;/strong&gt;&lt;br&gt;
Set &lt;code&gt;reasoning_effort: "low"&lt;/code&gt; for simple tasks, give &lt;code&gt;max_tokens&lt;/code&gt; enough room to finish, and pin the model version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is V4.1 Flash 1017 different from V4.1 Flash?&lt;/strong&gt;&lt;br&gt;
1017 is the October 17 update; DeepSeek's &lt;code&gt;deepseek-flash&lt;/code&gt; alias now points to it. In my test the two had the same speed and token use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set &lt;code&gt;reasoning_effort&lt;/code&gt;.&lt;/strong&gt; On simple tasks, &lt;code&gt;"low"&lt;/code&gt; saved 37% and answered ~45% sooner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leave headroom in &lt;code&gt;max_tokens&lt;/code&gt;.&lt;/strong&gt; Too little, and you pay for reasoning with no answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure time to the first content token,&lt;/strong&gt; not the first token, for anything interactive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin the model version&lt;/strong&gt; so a silent alias update doesn't change your costs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you run the script against another endpoint, post your numbers and the hour in the comments. I'll add them to the table.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Official prices read Nov 13, 2026; OceanToken prices read Nov 14, 2026. Tests run Nov 14, 2026, 03:57–04:07 UTC, from New York; about $0.20 spent in total.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>python</category>
    </item>
    <item>
      <title>I paid for 3 Seedance 2.5 clips: what 5 seconds of video really costs (and why one API charges 2 the official rate)</title>
      <dc:creator>OceanToken</dc:creator>
      <pubDate>Sun, 15 Nov 2026 07:25:59 +0000</pubDate>
      <link>https://dev.to/oceantoken/i-paid-for-3-seedance-25-clips-what-5-seconds-of-video-really-costs-and-why-one-api-charges-2x-4bn8</link>
      <guid>https://dev.to/oceantoken/i-paid-for-3-seedance-25-clips-what-5-seconds-of-video-really-costs-and-why-one-api-charges-2x-4bn8</guid>
      <description>&lt;p&gt;The same 5-second Seedance 2.5 clip at 720p costs &lt;strong&gt;$0.67 on one API and $2.37 on another&lt;/strong&gt;. Same model, same output. The price difference comes from how each platform turns ByteDance's token rate into a per-second price, and almost nobody shows the math.&lt;/p&gt;

&lt;p&gt;So I rendered three real clips, logged render time and the bill, and checked them against the token formula.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I work on growth at &lt;a href="https://oceantoken.ai" rel="noopener noreferrer"&gt;OceanToken&lt;/a&gt;, an OpenAI-compatible API that resells Seedance, and I ran the clips there. Third-party prices are copied from each platform's own page (linked, with the date I read it). I didn't render clips on other platforms for this post.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Seedance 2.5 bills &lt;strong&gt;per video token&lt;/strong&gt;: &lt;code&gt;width × height × frames ÷ 1024&lt;/code&gt;. A 5-second 720p clip is about &lt;strong&gt;2.25×&lt;/strong&gt; the cost of 480p.&lt;/li&gt;
&lt;li&gt;At ByteDance's official rate ($10.70 per 1M tokens), that's about &lt;strong&gt;$0.10 per second at 480p&lt;/strong&gt; and &lt;strong&gt;$0.23 per second at 720p&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Published resale rates for 720p run from &lt;strong&gt;$0.134 to $0.473 per second&lt;/strong&gt;. One platform charges exactly &lt;strong&gt;2× the official token rate&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;My 3 clips took &lt;strong&gt;78 s to 155 s&lt;/strong&gt; to render and cost &lt;strong&gt;$1.83&lt;/strong&gt; in total, &lt;strong&gt;within 0.5%&lt;/strong&gt; of the formula once you count frames correctly (5 seconds is 121 frames, not 120).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I tested
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prompt&lt;/td&gt;
&lt;td&gt;&lt;em&gt;"A barista pours latte art in a sunlit cafe, slow push-in, shallow depth of field, steam rising, soft morning light"&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Length / aspect&lt;/td&gt;
&lt;td&gt;5 s, 16:9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models&lt;/td&gt;
&lt;td&gt;Seedance 2.5 (480p, 720p), Seedance 2.0 Fast (480p)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Endpoint&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;POST /v1/videos&lt;/code&gt;, then poll &lt;code&gt;GET /v1/videos/{id}&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When&lt;/td&gt;
&lt;td&gt;Nov 14, 2026, ~04:08 UTC, all 3 submitted within 20 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Render time&lt;/td&gt;
&lt;td&gt;the API's own &lt;code&gt;completed_at − created_at&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Res&lt;/th&gt;
&lt;th&gt;Render time&lt;/th&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Tokens*&lt;/th&gt;
&lt;th&gt;Formula cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.0 Fast&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1 min 18 s&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.1 MB&lt;/td&gt;
&lt;td&gt;48,439&lt;/td&gt;
&lt;td&gt;$0.22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.5&lt;/td&gt;
&lt;td&gt;480p&lt;/td&gt;
&lt;td&gt;1 min 53 s&lt;/td&gt;
&lt;td&gt;2.7 MB&lt;/td&gt;
&lt;td&gt;48,439&lt;/td&gt;
&lt;td&gt;$0.49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seedance 2.5&lt;/td&gt;
&lt;td&gt;720p&lt;/td&gt;
&lt;td&gt;2 min 35 s&lt;/td&gt;
&lt;td&gt;5.8 MB&lt;/td&gt;
&lt;td&gt;108,900&lt;/td&gt;
&lt;td&gt;$1.11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$1.816 formula vs $1.826 billed&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*&lt;code&gt;width × height × 121 ÷ 1024&lt;/code&gt;, priced at the platform's tier-1 rate ($10.165/M for 2.5, $4.48/M for 2.0 Fast). "Billed" is the change in my key's spend counter across the three jobs; the API doesn't split it per clip, so treat the 0.5% gap as approximate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbmopbe5kjargwzsmfe2z.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbmopbe5kjargwzsmfe2z.gif" alt="Seedance 2.5, 480p, the full 5-second clip" width="480" height="270"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Seedance 2.5 at 480p, the full 5-second clip as a GIF. Unedited.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality notes (480p, Seedance 2.5):&lt;/strong&gt; The slow push-in is there: the cup goes from a mid shot to filling the frame by the last second. The pour reads as a single continuous stream, and the rosetta pattern builds up plausibly over the 5 seconds. The warm side light and shallow depth of field match the prompt. One miss: &lt;strong&gt;no visible steam&lt;/strong&gt; in the frames I checked, although the prompt asked for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What surprised me
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;5 seconds is 121 frames.&lt;/strong&gt; The file has 121 frames at 24 fps (5.04 s). Calculators that use &lt;code&gt;24 × 5 = 120&lt;/code&gt; undercount by about 0.8%. Small, but it's why my first reconciliation was off by 1.4% instead of 0.5%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio is on by default.&lt;/strong&gt; Every job came back with &lt;code&gt;"generate_audio": true&lt;/code&gt; (a 32 kHz stereo AAC track) even though I didn't ask for it. On Seedance 2.5 it doesn't change the price; on some other models it does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2.0 Fast really is faster:&lt;/strong&gt; 30% less render time than 2.5 at the same resolution, for 44% of the price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;720p took 37% longer than 480p&lt;/strong&gt; on 2.5, for a 2.1× bigger file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The MP4s carry C2PA content credentials.&lt;/strong&gt; There's a &lt;code&gt;c2pa&lt;/code&gt; manifest at the head of each file, so platforms that read provenance data can tell the clip is AI-generated.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Price per second, platform by platform
&lt;/h2&gt;

&lt;p&gt;Seedance 2.5 text-to-video, 16:9, no reference video, pay-as-you-go. Read Nov 13–14, 2026.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;How it bills&lt;/th&gt;
&lt;th&gt;480p / s&lt;/th&gt;
&lt;th&gt;720p / s&lt;/th&gt;
&lt;th&gt;5 s at 720p&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ByteDance official price (also what &lt;a href="https://vercel.com/ai-gateway/models/seedance-2.5" rel="noopener noreferrer"&gt;Vercel AI Gateway&lt;/a&gt; lists)&lt;/td&gt;
&lt;td&gt;$10.70 / 1M tokens&lt;/td&gt;
&lt;td&gt;~$0.103&lt;/td&gt;
&lt;td&gt;~$0.231&lt;/td&gt;
&lt;td&gt;~$1.16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://fal.ai/models/bytedance/seedance-2.5/text-to-video/llms.txt" rel="noopener noreferrer"&gt;fal&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$21.40 / 1M tokens&lt;/td&gt;
&lt;td&gt;~$0.2205 (quoted)&lt;/td&gt;
&lt;td&gt;~$0.4730 (quoted)&lt;/td&gt;
&lt;td&gt;~$2.37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.atlascloud.ai/models/bytedance/seedance-2.5/text-to-video" rel="noopener noreferrer"&gt;Atlas Cloud&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;flat per second&lt;/td&gt;
&lt;td&gt;$0.134&lt;/td&gt;
&lt;td&gt;$0.134 (resolution not broken out)&lt;/td&gt;
&lt;td&gt;$0.67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://replicate.com/bytedance/seedance-2.5" rel="noopener noreferrer"&gt;Replicate&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;listed; price not shown in page text&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://oceantoken.ai/models/bytedance/seedance-2.5" rel="noopener noreferrer"&gt;OceanToken&lt;/a&gt; (tier 1)&lt;/td&gt;
&lt;td&gt;$10.165 / 1M tokens (5% below official)&lt;/td&gt;
&lt;td&gt;~$0.098&lt;/td&gt;
&lt;td&gt;~$0.22&lt;/td&gt;
&lt;td&gt;~$1.10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;How to read this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;fal's token rate is exactly 2× official.&lt;/strong&gt; You're paying for its queue, SDKs and playground. That may be worth it to you, but it should be a conscious choice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A flat per-second rate is only comparable once you know the resolution.&lt;/strong&gt; If $0.134 covers 720p, it's well below official. If it only covers 480p, it's above. Run one clip and read the bill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upscaled ≠ native.&lt;/strong&gt; Several platforms (including us) sell "render low, AI-upscale to 1080p" variants at lower prices. They're a different product; don't put them in the same column.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Convert any token rate to dollars per second
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;seedance_cost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;usd_per_million&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;frames&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;fps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;          &lt;span class="c1"&gt;# 5 s -&amp;gt; 121 frames&lt;/span&gt;
    &lt;span class="n"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;frames&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;usd_per_million&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1_000_000&lt;/span&gt;

&lt;span class="c1"&gt;# sanity check against my bill&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;seedance_cost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1280&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;720&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;10.165&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;     &lt;span class="c1"&gt;# 1.107  (720p, Seedance 2.5)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;seedance_cost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;854&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;480&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;10.165&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# 0.492  (480p, Seedance 2.5)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plug in any platform's per-million rate to compare it with a flat per-second price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The code I used
&lt;/h2&gt;



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

&lt;span class="no"&gt;BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://api.oceantoken.ai/v1"&lt;/span&gt;          &lt;span class="c1"&gt;# any OpenAI-style /videos endpoint&lt;/span&gt;
&lt;span class="no"&gt;H&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"Bearer {KEY}"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;job&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="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"{BASE}/videos"&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="no"&gt;H&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="s2"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"bytedance/seedance-2.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;"seconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"1280x720"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&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="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;v&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"{BASE}/videos/{job['id']}"&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="no"&gt;H&lt;/span&gt;&lt;span class="p"&gt;)&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="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"completed"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"failed"&lt;/span&gt;&lt;span class="p"&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;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"completed_at"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"s"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"clip.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"wb"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&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;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"{BASE}/videos/{job['id']}/content"&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="no"&gt;H&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What I could not determine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-clip billing.&lt;/strong&gt; I only had the key's running total, which lags a few seconds behind, so the per-clip costs above come from the formula.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frame count on the 720p and 2.0 Fast clips.&lt;/strong&gt; I verified 121 frames on the 480p file and assumed the same for the other two.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other platforms' real bills.&lt;/strong&gt; Their rows are list prices, not invoices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality across platforms.&lt;/strong&gt; It's the same model everywhere, but I didn't check whether any platform adds re-encoding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does a 5-second Seedance 2.5 clip cost?&lt;/strong&gt;&lt;br&gt;
At ByteDance's official rate, about $0.51 at 480p and $1.16 at 720p for 16:9. Resellers range from roughly $0.67 to $2.37 for the 720p clip.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why do some platforms quote per second and others per token?&lt;/strong&gt;&lt;br&gt;
ByteDance meters video in tokens (frame size × frame count). Per-second prices are a conversion, and they only hold for one resolution and aspect ratio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does audio cost extra on Seedance 2.5?&lt;/strong&gt;&lt;br&gt;
Not on the platforms above; audio is generated by default at the same price. Check before assuming a silent clip.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does Seedance 2.5 take to render?&lt;/strong&gt;&lt;br&gt;
In my test, 1 min 53 s for 5 s at 480p and 2 min 35 s at 720p. Seedance 2.0 Fast did 480p in 1 min 18 s.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping:&lt;/strong&gt; 480p at or near the official token rate, about $0.50 per 5-second draft.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final renders:&lt;/strong&gt; compare the 720p column only. The spread is about 3.5× for the same model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed over polish:&lt;/strong&gt; Seedance 2.0 Fast, for under half the price.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you run the same prompt on another platform, post your render time and bill in the comments with the date. These prices move every few weeks, and I'll keep the table updated.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Third-party prices read Nov 13, 2026; OceanToken prices read Nov 14, 2026. Test run Nov 14, 2026, ~04:08–04:11 UTC.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>video</category>
      <category>pricing</category>
    </item>
  </channel>
</rss>
