<?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: RanThis</title>
    <description>The latest articles on DEV Community by RanThis (@ranthis).</description>
    <link>https://dev.to/ranthis</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%2F4203586%2Ffe0f42a1-1102-4cb0-933a-c14a92253fd1.png</url>
      <title>DEV Community: RanThis</title>
      <link>https://dev.to/ranthis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ranthis"/>
    <language>en</language>
    <item>
      <title>Claude Fable 5.1 Agent Test: Sonnet Tied It at 1/8 the Cost</title>
      <dc:creator>RanThis</dc:creator>
      <pubDate>Fri, 30 Oct 2026 04:25:07 +0000</pubDate>
      <link>https://dev.to/ranthis/claude-fable-51-agent-test-sonnet-tied-it-at-18-the-cost-3g42</link>
      <guid>https://dev.to/ranthis/claude-fable-51-agent-test-sonnet-tied-it-at-18-the-cost-3g42</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ranthis.com/guides/claude-fable-5-1-agentic-test?utm_source=devto&amp;amp;utm_campaign=claude-fable-5-1-agentic-test" rel="noopener noreferrer"&gt;RanThis&lt;/a&gt;. Cover: AI-generated illustration.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude Fable 5.1 is not worth its price for a month-end close with tools. We gave Fable, Opus 5.5 and Sonnet 5.5 three exports and ten traps; all three closed the books correctly, and Fable cost the most and took the longest.&lt;/p&gt;

&lt;p&gt;Anthropic sells Fable "for demanding reasoning and long-horizon agentic work", at $10/$50 per million tokens: 2.5 times the list price of Opus 5.5 and five times Sonnet 5.5. So we tested exactly that kind of job: paging through an invoice list, a bank statement and a card report, and matching every payment to an invoice. Finance teams do this at every month end, and AI agents are now pitched for it. We measured it on 28 Oct 2026 through the Anthropic API, from a Python script. The data is invented. The prompt, the answer key and the scoring code were committed before any model was called, and the raw logs of every run are kept with this article's source files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All three models found all ten traps.&lt;/strong&gt; In round 1 (140 invoices) Fable 5.1, Opus 5.5 and Sonnet 5.5 gave the right answer to every question in every run. The one exception was a formatting slip: one Opus run sent two JSON objects. In round 2 (700 invoices, about 58 page reads), every run of every model again scored 10/10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost per month-end close, round 1 (median): Sonnet 5.5 $0.087, Opus 5.5 $0.20, Fable 5.1 $0.70.&lt;/strong&gt; Same answers, an 8× spread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Round 2 (median): Sonnet 5.5 $0.56, Opus 5.5 $1.02, Fable 5.1 $3.74 (one run).&lt;/strong&gt; Sonnet was also the fastest in both rounds: 30 s and 2.6 minutes, against 85 s and 6.2 minutes for Fable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fable worked one page at a time.&lt;/strong&gt; In round 2 it made 80 tool calls over 81 model turns, one file page per turn. Sonnet and Opus asked for 8–10 pages at once and finished in 11–22 turns. Each turn re-sends the whole conversation, so Fable's run re-read 3.8 million cached tokens; the median Sonnet run re-read 0.6 million and the median Opus run 0.8 million.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt caching is what made Fable affordable here.&lt;/strong&gt; At the full input price, those 3.8 million re-read tokens alone would have cost about $38 instead of $0.94.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What we did not test:&lt;/strong&gt; Fable at a lower effort setting, Opus 5.5 at high effort, the Claude apps (claude.ai, Claude for Excel), real bank formats, or files the model has to open itself. This is one invented month, ten questions with fixed answers, and three runs per model per round (one Fable run in round 2, see Setup).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The job:&lt;/strong&gt; close October for a small agency from three CSV exports: the invoice list (September and October invoices), the October bank statement, and the October card-processor report. Ten questions: how many invoices are still open, the total customers owe, the overpaid invoice and by how much, the card payout still in transit and its amount, total card fees, the biggest debtor and what they owe, and the bank receipt that matches no invoice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ten traps, none hinted in the prompt:&lt;/strong&gt; a partial credit note written in the notes column; a cancelled invoice; three international transfers short by a wire fee (the rest is still owed); a payment with a typo reference (letter O for zero); one transfer paying two invoices; a half payment "on account"; an invoice paid twice and refunded; an invoice paid twice and not refunded; a card payout created on Friday 30 October that reaches the bank on Monday; and a deposit from a company with no invoice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools, not a pasted file:&lt;/strong&gt; the models never saw the files whole. They got three tools: &lt;code&gt;list_files&lt;/code&gt;, &lt;code&gt;read_file&lt;/code&gt; (at most 25 lines per call) and &lt;code&gt;calculate&lt;/code&gt; (exact decimal arithmetic). The agent loop ran until the model stopped asking for tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two sizes:&lt;/strong&gt; round 1 had 140 invoices and about 300 rows across the three files (13 reads at minimum). Round 2 was sealed after round 1 came back perfect. It hid the same traps in 700 invoices and about 1,430 rows (58 reads at minimum), with the trap invoices moved deep into the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoring (code, not AI):&lt;/strong&gt; one point per question, numbers to the cent, and the reply must parse as one JSON object.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; &lt;code&gt;claude-fable-5-1&lt;/code&gt;, &lt;code&gt;claude-opus-5-5&lt;/code&gt; and &lt;code&gt;claude-sonnet-5-5&lt;/code&gt; at their defaults (no effort or thinking setting), three runs each per round. We stopped Fable after one run in round 2. That run cost $3.74 and scored 10/10, and two more runs would have added about $7.50 without changing the conclusion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; tokens × list price, with prompt caching on, because that is how an agent loop is run for real: each turn re-sends the whole conversation, and cached tokens are billed at a fraction. Prices per million tokens: Fable 5.1 $10 in, $50 out, $0.25 cache read; Opus 5.5 $4, $20, $0.20; Sonnet 5.5 $2, $10, $0.10. Cache writes are billed at 1.25× input, and output includes thinking tokens. The English rounds cost $11.58 in total (round 1 $2.93, round 2 $8.65). One more Opus run in round 2 was cut off by a shell timeout before it saved a result and was rerun; its partial cost is not in that total.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2F334cdc4d87594ae497cc4506cec4f4ae%2Franthis-claude-fable-5-1-agentic-test-data.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2F334cdc4d87594ae497cc4506cec4f4ae%2Franthis-claude-fable-5-1-agentic-test-data.png" title="Some of the trap rows, copied from the round 2 test files with their line numbers. Highlighted: the credit note, the cancelled invoice, the deposit nobody invoiced and the typo reference INV16O7." alt="Rows from the round 2 files: a credit note and a cancellation in the notes column, a typo reference, a deposit from a company with no invoice, a refunded double payment and the last payout" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model (default settings)&lt;/th&gt;
&lt;th&gt;Round 1 scores (3 runs)&lt;/th&gt;
&lt;th&gt;Round 1 median time / cost&lt;/th&gt;
&lt;th&gt;Round 2 scores&lt;/th&gt;
&lt;th&gt;Round 2 median time / cost&lt;/th&gt;
&lt;th&gt;Round 2 turns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Fable 5.1&lt;/td&gt;
&lt;td&gt;10, 10, 10&lt;/td&gt;
&lt;td&gt;85 s / $0.70&lt;/td&gt;
&lt;td&gt;10 (1 run)&lt;/td&gt;
&lt;td&gt;370 s / $3.74&lt;/td&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Opus 5.5&lt;/td&gt;
&lt;td&gt;10, 0*, 10&lt;/td&gt;
&lt;td&gt;52 s / $0.20&lt;/td&gt;
&lt;td&gt;10, 10, 10&lt;/td&gt;
&lt;td&gt;189 s / $1.02&lt;/td&gt;
&lt;td&gt;19–22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Sonnet 5.5&lt;/td&gt;
&lt;td&gt;10, 10, 10&lt;/td&gt;
&lt;td&gt;30 s / $0.087&lt;/td&gt;
&lt;td&gt;10, 10, 10&lt;/td&gt;
&lt;td&gt;157 s / $0.56&lt;/td&gt;
&lt;td&gt;11–17&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;* All ten answers were right, but the reply contained two JSON objects (see below), and the sealed scoring code reads only one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2F52e61e856ae54281bfc7be529f916b2b%2Franthis-claude-fable-5-1-agentic-test-runs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2F52e61e856ae54281bfc7be529f916b2b%2Franthis-claude-fable-5-1-agentic-test-runs.png" title="Every run of both rounds, re-drawn from the saved logs (no new API calls). Each line is one full agent loop: seconds, model turns, tool calls, cost and score out of 10. The red line is the Opus run that sent its answer twice." alt="Terminal output listing every run of both rounds with seconds, turns, tool calls, cost and score" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the models differed
&lt;/h2&gt;

&lt;p&gt;None of the ten traps separated the models. Every model excluded the cancelled invoice, applied the credit note, matched the typo reference by customer and amount, saw that one double payment had been refunded and the other had not, and found the payout that had not reached the bank. Differences showed up in how they worked and in how they reported.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How they used the tools.&lt;/strong&gt; Sonnet and Opus planned the reading: the first turn listed the files, and the next few turns asked for 8–10 pages at a time. Fable read sequentially in two of its four logged runs, one page per turn: 18 turns in round 1 and 81 turns in round 2, against 11–22 turns for the others on the same files. It reached the same answers, but an agent loop pays for every turn, and a 1,430-row job took Fable over six minutes against under three for Sonnet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How they reported.&lt;/strong&gt; The prompt asked for "only a JSON object". Fable and Opus often added notes anyway, and the notes are the useful part for a finance team. Opus in round 2 listed each judgement call with its effect on the totals: &lt;em&gt;"If finance writes off the three small shortfalls, the count drops to 111 and the total to $527,322.32."&lt;/em&gt; Fable listed every adjustment under "Notes on how I got there, so you can check my judgement calls". Sonnet gave plain JSON in round 1. In round 2 it added a warning that it had "added up the figures by hand from the three exports, so a missed or misread line is possible". It had in fact used the calculator tool 21 times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The one failed run.&lt;/strong&gt; In Opus run 2 of round 1, the model sent a JSON object with nine keys, then wrote &lt;em&gt;"Sorry, that's only nine keys. Here is the full object with all ten"&lt;/em&gt; and sent the full object. All ten numbers in the second object were right. The sealed scoring code expects one object and scored the run 0. If a script reads your agent's output, check that you get exactly one object back.&lt;/p&gt;

&lt;h2&gt;
  
  
  What worked
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Every model read every line of all three files in every run. The logs record which lines each model read, and none skipped a page.&lt;/li&gt;
&lt;li&gt;The ten traps cover what month-end reconciliation usually throws up, and every model handled all ten.&lt;/li&gt;
&lt;li&gt;Prompt caching kept the long loops cheap. Fable's round 2 run would have cost roughly ten times as much without it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What didn't work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The test did not separate the models on accuracy. Making the files five times larger did not either. A harder job might separate them: messier formats, missing data, or a task where the model has to choose its own method. We have not measured that. Our &lt;a href="https://ranthis.com/guides/gpt-6-1-terra-spreadsheet-test" rel="noopener noreferrer"&gt;messy sales sheet test of GPT-6.1 Terra, Astra and Fable 5.1&lt;/a&gt; is one where Fable did drop a point, on a single ambiguous cell.&lt;/li&gt;
&lt;li&gt;The wire-fee shortfalls are a judgement call (chase the customer, or write the fee off), and our key counts them as still owed. All three models agreed in English. In our Vietnamese version of the same test, which we ran for our sister site, two of three Sonnet runs wrote them off and lost two points each, and said so in their notes.&lt;/li&gt;
&lt;li&gt;Fable in round 2 is one run, not three, so its round 2 numbers show what one run cost, not a typical range.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  How much does Claude Fable 5.1 cost?
&lt;/h3&gt;

&lt;p&gt;Anthropic lists Claude Fable 5.1 at $10 per million input tokens and $50 per million output tokens, with cache reads at $0.25 per million. In our test, one agent run closing a small month (about 300 rows) cost a median $0.70. A run five times the size cost $3.74, with prompt caching on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Claude Fable 5.1 better than Opus 5.5 for agents?
&lt;/h3&gt;

&lt;p&gt;Not on this job. Fable 5.1, Opus 5.5 and Sonnet 5.5 all found the same ten traps in every scored run. Fable cost 3.4 times as much as Opus in round 1 and 3.7 times in round 2, and it was the slowest, partly because it read one page per turn.&lt;/p&gt;

&lt;h3&gt;
  
  
  When should I pick Fable 5.1?
&lt;/h3&gt;

&lt;p&gt;Anthropic's own guidance is to use Opus 5.5 for most workloads and to move to Fable 5.1 "when your evals on Claude Opus 5.5 at higher effort still fall short". Our results fit that advice. Run your own task on Sonnet or Opus first, and pay for Fable only if they fail it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our verdict
&lt;/h2&gt;

&lt;p&gt;For a month-end close with tools, we would not use Claude Fable 5.1. Anthropic describes Fable as built for long-horizon agentic work, and this was such a job: 58 page reads, 10 traps, numbers to the cent. Sonnet 5.5 gave the same answers for about an eighth of the cost in round 1 and a seventh in round 2, in less than half the time. If you work in Claude, start agent jobs like this on Sonnet 5.5. Opus 5.5 explained its judgement calls most clearly in our runs, so it is the step up if you want that, and keep Fable for jobs where both of them fail. Whatever model you use, ask it to list the calls it made (written-off fees, overpayments) next to the numbers, because those notes are what a person checks before closing the month.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How this was made: an AI (Claude) helped write this article; the RanThis editor ran the test script, checked every number against the raw results and checked facts against the linked sources.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>GPT-6.1 Terra vs GPT-6 Astra vs Claude Fable 5.1: Messy Sales Sheet Test</title>
      <dc:creator>RanThis</dc:creator>
      <pubDate>Wed, 28 Oct 2026 04:12:25 +0000</pubDate>
      <link>https://dev.to/ranthis/gpt-61-terra-vs-gpt-6-astra-vs-claude-fable-51-messy-sales-sheet-test-9al</link>
      <guid>https://dev.to/ranthis/gpt-61-terra-vs-gpt-6-astra-vs-claude-fable-51-messy-sales-sheet-test-9al</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://ranthis.com/guides/gpt-6-1-terra-spreadsheet-test" rel="noopener noreferrer"&gt;RanThis&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cover: AI-generated illustration.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;OpenAI released GPT-6.1 Terra on 26 October as its cheaper, faster model for everyday work: $1 per million input tokens and $5 per million output, a tenth of GPT-6 Astra's list price. Cheap only helps if the answers hold up, so the day after launch we gave Terra, GPT-6 Astra and Claude Fable 5.1 the same messy sales sheet: 40 rows, six planted problems, three branch totals that have to be right to the dollar. On "high" effort Terra matched Astra's perfect score in all three runs at about a tenth of the cost. The more useful finding was elsewhere: one ambiguous cell changed a branch total by $10,800 from one run to the next, on the same model with the same settings.&lt;/p&gt;

&lt;p&gt;Measured on 27 Oct 2026 through the OpenAI and Anthropic APIs, from a Python script. The data is invented; the task, answer key and scoring code were committed before any model was called, and the raw answers are kept with this article's source files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terra on "high" scored 10/10 in all three runs&lt;/strong&gt;, the same as GPT-6 Astra, in a median 12.9 s vs 16.3 s, for $0.0062 vs $0.061 per run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terra on its default setting ("medium") was faster and cheaper still ($0.0053, 11 s) but scored 10, 9, 9.&lt;/strong&gt; In two of three runs it dropped one row instead of counting it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Fable 5.1 scored 9, 10, 10&lt;/strong&gt; at $0.10 per run, the most expensive of the five setups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Max" effort scored 10/10 three times but took 39–106 s&lt;/strong&gt; and 3,100–9,400 output tokens per run, 4× the cost of "high" for the same score.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Every model found all six planted problems in every run&lt;/strong&gt;, and none flagged a clean row. Every lost point came from the same cell: row 18, a price written "1.2k".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What we did not test:&lt;/strong&gt; Terra's headline feature, computer use (operating apps on screen), or the ChatGPT apps. This is one structured task through the API, three runs per setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Task:&lt;/strong&gt; a CSV of 40 invented Q3 sales rows for an office furniture company with branches in Boston, Chicago and San Francisco, prices in US dollars. Every model got the same prompt: total revenue per branch, the top branch, and every abnormal row by number, returned as JSON.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules in the prompt:&lt;/strong&gt; exclude rows that look like bad data; normalize rows that are only written differently (an abbreviation, another name for the same branch or price) and count them; count duplicates once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planted problems:&lt;/strong&gt; a duplicated order (rows 13 and 39, both must be listed), the date 2026-09-31, a unit price written "1.2k", the branch written "SF", and a quantity of −2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoring (code, not AI):&lt;/strong&gt; 1 point per branch total correct to the dollar, 1 for the top branch, 1 per planted problem found, minus 1 for each clean row flagged. Maximum 10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; &lt;code&gt;gpt-6.1-terra&lt;/code&gt; at reasoning effort medium (the model's default), high and max; &lt;code&gt;gpt-6-astra&lt;/code&gt; at high; &lt;code&gt;claude-fable-5-1&lt;/code&gt; at its default. Three runs each, interleaved, no streaming.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; tokens × list price ($1/$5 per million for Terra, $10/$50 for Astra and Fable 5.1), output including reasoning tokens. We did not subtract OpenAI's cached-input discount, so the OpenAI figures are slightly high. All 15 runs together cost $0.61.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2Fbeb19295458446bc808e50fbef3a0d72%2Fgpt-6-1-terra-spreadsheet-test-sheet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2Fbeb19295458446bc808e50fbef3a0d72%2Fgpt-6-1-terra-spreadsheet-test-sheet.png" title="The test sheet as it was sent to every model (here opened in LibreOffice Calc). We highlighted the six planted rows for this screenshot; the models got the plain CSV." alt="The 40-row test sheet with the six planted rows highlighted" width="800" height="1022"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model (effort)&lt;/th&gt;
&lt;th&gt;Score, 3 runs&lt;/th&gt;
&lt;th&gt;Median time&lt;/th&gt;
&lt;th&gt;Median output tokens&lt;/th&gt;
&lt;th&gt;Median cost per run&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra (medium, default)&lt;/td&gt;
&lt;td&gt;10, 9, 9&lt;/td&gt;
&lt;td&gt;11.1 s&lt;/td&gt;
&lt;td&gt;824&lt;/td&gt;
&lt;td&gt;$0.0053&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra (high)&lt;/td&gt;
&lt;td&gt;10, 10, 10&lt;/td&gt;
&lt;td&gt;12.9 s&lt;/td&gt;
&lt;td&gt;995&lt;/td&gt;
&lt;td&gt;$0.0062&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6.1 Terra (max)&lt;/td&gt;
&lt;td&gt;10, 10, 10&lt;/td&gt;
&lt;td&gt;55.5 s&lt;/td&gt;
&lt;td&gt;4,836&lt;/td&gt;
&lt;td&gt;$0.025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6 Astra (high)&lt;/td&gt;
&lt;td&gt;10, 10, 10&lt;/td&gt;
&lt;td&gt;16.3 s&lt;/td&gt;
&lt;td&gt;973&lt;/td&gt;
&lt;td&gt;$0.061&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Fable 5.1 (default)&lt;/td&gt;
&lt;td&gt;9, 10, 10&lt;/td&gt;
&lt;td&gt;19.1 s&lt;/td&gt;
&lt;td&gt;1,699&lt;/td&gt;
&lt;td&gt;$0.101&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2Fa78971b0d0ad4ae3841de79e0f6f6cca%2Fgpt-6-1-terra-spreadsheet-test-runs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.dunggi.vn%2Fmedia%2Fimages%2F2026%2F10%2Fa78971b0d0ad4ae3841de79e0f6f6cca%2Fgpt-6-1-terra-spreadsheet-test-runs.png" title="Every run, re-read from the saved logs (no new API calls). The last column shows whether the model counted row 18 or dropped it, which left Chicago $10,800 short." alt="Terminal output listing all 15 runs with score, seconds, cost and what happened to row 18" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One cell, two different totals
&lt;/h2&gt;

&lt;p&gt;Row 18 sold 9 filing cabinets at "1.2k", that is $1,200. Every other filing cabinet in the sheet sold at $3,200. Our answer key treats "1.2k" as a price written differently, so it should be normalized and counted. But a price that low can also look like a typo, and the sheet invites that reading: the shorthand and the odd price sit in the same cell.&lt;/p&gt;

&lt;p&gt;Astra and Terra on high and max counted it in every run. Terra on default counted it once and dropped it twice; Fable 5.1 dropped it once and counted it twice. Same prompt, same data, same settings.&lt;/p&gt;

&lt;p&gt;What the models wrote about the row is the part to watch. When Terra (default) counted it, its note said: &lt;em&gt;"The unit price was normalized from 1.2k to 1200."&lt;/em&gt; When it dropped it, the note said only: &lt;em&gt;"The price of 1.2k means $1,200, which differs from the $3,200 price of the other filing cabinets."&lt;/em&gt; That note never says the row was left out of the total; you find out only by checking the Chicago number. Fable's note in the run where it dropped the row was explicit: the price "does not match the Filing cabinet price of 3200 used everywhere else, so the row was excluded as bad data."&lt;/p&gt;

&lt;p&gt;Earlier that day we had run the same 40 rows and six traps as a Vietnamese-language sheet (Vietnamese labels, prices and shorthand); the English sheet above was derived from it. The pattern flipped: there, Terra on default counted row 18 in all three runs and Terra on high dropped it in all three. So the effort setting is not what decides this row; it varies run to run. Only GPT-6 Astra and Terra on max counted it in all six runs across the two sheets.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you clean sheets with AI
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ask what happened to each flagged row, not only why it is flagged.&lt;/strong&gt; "Counted after fixing" and "excluded" should be separate answers. In our runs, a note about a price difference sometimes meant the row was dropped and sometimes did not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the rule for your edge case into the prompt.&lt;/strong&gt; "A price written like 1.2k means 1,200; count it" removes the coin flip. The models followed the rules they were given; the gap was in a rule we left open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run it twice, or check one total by hand.&lt;/strong&gt; A single run can't show you the variance; two runs that disagree on a total tell you where to look.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't jump to maximum effort.&lt;/strong&gt; Terra on high matched max on accuracy here at a quarter of the cost and under a quarter of the time.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What worked
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;JSON output parsed on every run of every model; no run needed a retry for format.&lt;/li&gt;
&lt;li&gt;All five setups caught the duplicate, the impossible date, the "SF" branch and the negative quantity in every run.&lt;/li&gt;
&lt;li&gt;Pinning the task before calling any model kept the comparison fair: each model got byte-identical input.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What didn't work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Three runs per setup is enough to show that row 18 flips, not to measure how often. Terra on default dropped it in 2 of 3 runs here and 0 of 3 on the Vietnamese-language sheet.&lt;/li&gt;
&lt;li&gt;One API request (Terra on max, run 3) hung for over nine minutes on our side; we stopped it and re-ran that run. The timing in the table is from the completed re-run.&lt;/li&gt;
&lt;li&gt;One task cannot rank these models in general. OpenAI's launch claims for Terra (computer use, scores on Agents' Last Exam, a benchmark of agents using professional software) are theirs; we did not measure them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Our verdict
&lt;/h2&gt;

&lt;p&gt;For structured office work like checking and totalling a sales sheet, GPT-6.1 Terra on "high" did everything GPT-6 Astra did in our test, a little faster and at about a tenth of the price. The default setting is cheaper again but less steady on judgment calls. Whichever model you use, make it say whether each flagged row was counted or excluded, and spell out how to treat shorthand like "1.2k": on our sheet, that one cell was the difference between two Chicago totals $10,800 apart.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How this was made: an AI (Claude) helped write this article; the RanThis editor ran the test script, checked every number against the raw results and checked facts against the linked sources.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>llm</category>
      <category>productivity</category>
    </item>
    <item>
      <title>ElevenLabs API key: free tier tested on 4 models, incl. v4 and Vietnamese</title>
      <dc:creator>RanThis</dc:creator>
      <pubDate>Mon, 26 Oct 2026 03:56:02 +0000</pubDate>
      <link>https://dev.to/ranthis/elevenlabs-api-key-free-tier-tested-on-4-models-incl-v4-and-vietnamese-286</link>
      <guid>https://dev.to/ranthis/elevenlabs-api-key-free-tier-tested-on-4-models-incl-v4-and-vietnamese-286</guid>
      <description>&lt;p&gt;An ElevenLabs API key works on the free plan, and it is enough to try every current text-to-speech model, including Eleven v4. We created one with a 2,000-credit cap and ran the same sentence through four models in English and Vietnamese, then hit the free plan's walls on purpose to see the exact errors. Below: how the key behaves, what each call cost in credits, how fast it was, and what the free tier blocks.&lt;/p&gt;

&lt;p&gt;Measured on 24 Oct 2026 with one key on an ElevenLabs Free account, from a Python script on a Windows 11 PC (WSL, Ubuntu 24.04) in Vietnam. Prices are from ElevenLabs' pricing pages, read the same day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The free key ran all four models we tried&lt;/strong&gt;: Flash v2.5, Multilingual v2, v3 and the new v4. Each call returned a 128 kbps MP3 of about 8–9 seconds for a 140-character sentence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flash cost half.&lt;/strong&gt; A 140-character sentence cost 70 credits on Flash v2.5 and 140 on the other three. The API says so in a &lt;code&gt;character-cost&lt;/code&gt; response header on every call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The usage counter lags.&lt;/strong&gt; Right after eight calls, &lt;code&gt;/v1/user/subscription&lt;/code&gt; still showed 0 credits used; a few minutes later it showed 1,050, exactly the sum of the headers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick the model by language.&lt;/strong&gt; Played back through ElevenLabs' own speech-to-text, Vietnamese from Flash v2.5, v3 and v4 came back word for word; Multilingual v2, which does not list Vietnamese, came back garbled (61% word error rate).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming is fast.&lt;/strong&gt; Flash v2.5 over the streaming endpoint sent its first audio bytes in 0.19 s and finished in 0.40 s.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The free tier blocks three things we tried&lt;/strong&gt;: 192 kbps MP3 (Creator and up), 44.1 kHz PCM (Pro and up) and voices from the community library (Creator and up). The 21 default voices work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Account:&lt;/strong&gt; ElevenLabs Free, 10,000 credits a month, no payment method.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key:&lt;/strong&gt; created on 24 Oct 2026 in the ElevenLabs web app under Developers → API Keys, with a 2,000-credit limit and no expiry. It sits in an &lt;code&gt;.env&lt;/code&gt; file on the server that runs the script, never in a browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client:&lt;/strong&gt; Python 3.13 with &lt;code&gt;httpx&lt;/code&gt;, calling &lt;code&gt;https://api.elevenlabs.io&lt;/code&gt; directly with the &lt;code&gt;xi-api-key&lt;/code&gt; header (no SDK).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; "Bella", the first of the 21 default voices the key could list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text:&lt;/strong&gt; one sentence of 140 characters in English and one of 140 characters in Vietnamese, the same meaning in both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checks:&lt;/strong&gt; credits from the &lt;code&gt;character-cost&lt;/code&gt; header and from &lt;code&gt;/v1/user/subscription&lt;/code&gt;; timing from the start of the request to the last byte; Vietnamese accuracy by sending each file to &lt;code&gt;/v1/speech-to-text&lt;/code&gt; (&lt;code&gt;scribe_v1&lt;/code&gt;) and comparing the transcript with the original sentence. Audio length is estimated from file size at 128 kbps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to get an ElevenLabs API key
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign in to &lt;a href="https://elevenlabs.io" rel="noopener noreferrer"&gt;ElevenLabs&lt;/a&gt; (a free account is enough).&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Developers → API Keys&lt;/strong&gt; and create a key.&lt;/li&gt;
&lt;li&gt;Give it a name per app, and set the limits ElevenLabs offers: which endpoints the key can call, a credit quota, and an IP allowlist. We set a 2,000-credit quota so a bug in the script could not drain the month's 10,000 credits.&lt;/li&gt;
&lt;li&gt;Store it as an environment variable (&lt;code&gt;ELEVENLABS_API_KEY&lt;/code&gt;) on your server.&lt;/li&gt;
&lt;li&gt;Send it in an &lt;code&gt;xi-api-key&lt;/code&gt; header on every request. A first test call is &lt;code&gt;GET /v1/models&lt;/code&gt;, which lists the models your key can use.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ElevenLabs' docs say plainly that the key is a secret and should not go into client-side code such as browsers or apps. For calls that must come from the client, the docs point to single-use tokens instead.&lt;/p&gt;

&lt;p&gt;What the API told us when the key was wrong:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Request&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No key&lt;/td&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;"Neither authorization header nor xi-api-key received, please provide one."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrong key&lt;/td&gt;
&lt;td&gt;401&lt;/td&gt;
&lt;td&gt;"Invalid API key"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Our key&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;Subscription details: tier &lt;code&gt;free&lt;/code&gt;, 10,000-credit limit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What each model cost and how fast it was
&lt;/h2&gt;

&lt;p&gt;Same voice, same 140-character sentence, one call each, full MP3 returned (not streamed):&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;Credits (EN / VI)&lt;/th&gt;
&lt;th&gt;Time to full file, EN&lt;/th&gt;
&lt;th&gt;Time to full file, VI&lt;/th&gt;
&lt;th&gt;Audio length&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flash v2.5&lt;/td&gt;
&lt;td&gt;70 / 70&lt;/td&gt;
&lt;td&gt;2.04 s*&lt;/td&gt;
&lt;td&gt;0.36 s&lt;/td&gt;
&lt;td&gt;~8.7 s / ~7.5 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multilingual v2&lt;/td&gt;
&lt;td&gt;140 / 140&lt;/td&gt;
&lt;td&gt;1.43 s&lt;/td&gt;
&lt;td&gt;1.48 s&lt;/td&gt;
&lt;td&gt;~8.9 s / ~9.1 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v3&lt;/td&gt;
&lt;td&gt;140 / 140&lt;/td&gt;
&lt;td&gt;2.67 s&lt;/td&gt;
&lt;td&gt;3.17 s&lt;/td&gt;
&lt;td&gt;~8.4 s / ~8.4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v4&lt;/td&gt;
&lt;td&gt;140 / 140&lt;/td&gt;
&lt;td&gt;2.51 s&lt;/td&gt;
&lt;td&gt;2.35 s&lt;/td&gt;
&lt;td&gt;~9.2 s / ~8.9 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*The first call of the run, which included opening the connection; the Vietnamese Flash call right after took 0.36 s.&lt;/p&gt;

&lt;p&gt;On the streaming endpoint (&lt;code&gt;/v1/text-to-speech/{voice_id}/stream&lt;/code&gt;), Flash v2.5 delivered the first bytes of the English sentence in 0.19 s and the whole file in 0.40 s. That is the number that matters for anything that talks back to a user.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;/v1/models&lt;/code&gt; list explains the credits: Flash, Turbo, v4 Turbo and v3 Conversational carry a 0.5 character-cost multiplier, the rest 1.0. It also shows the per-request ceiling on the free plan: 40,000 characters for Flash v2.5, 10,000 for v4 and Multilingual v2, 5,000 for v3.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which models speak Vietnamese
&lt;/h2&gt;

&lt;p&gt;We fed each Vietnamese file to ElevenLabs' speech-to-text and compared what came back with what we sent.&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;Vietnamese in its language list&lt;/th&gt;
&lt;th&gt;Word error rate&lt;/th&gt;
&lt;th&gt;What came back&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flash v2.5&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;6.5%&lt;/td&gt;
&lt;td&gt;Identical except "khoá" spelled "khóa" (both are correct spellings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v3&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;6.5%&lt;/td&gt;
&lt;td&gt;Same as Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;v4&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;6.5%&lt;/td&gt;
&lt;td&gt;Same, but the first word heard as "Khoa"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multilingual v2&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;61.3%&lt;/td&gt;
&lt;td&gt;Mostly garbled: "giống như mật khẩu" became "Gyeonghu mắt kháu"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the 6.5% for the first three is spelling, not pronunciation. Multilingual v2 still returns audio and charges full credits for a language it does not support, without an error. Check a model's &lt;code&gt;languages&lt;/code&gt; in &lt;code&gt;/v1/models&lt;/code&gt; before you choose it.&lt;/p&gt;

&lt;p&gt;A machine transcript is not a native listener. It catches words the model got wrong, not how natural the voice sounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the free key cannot do
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What we tried&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;output_format=mp3_44100_192&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;403: "Output format 'mp3_44100_192' is only available on the Creator tier and above."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;output_format=pcm_44100&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;403: "Output format 'pcm_44100' is only available on the Pro tier and above."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A voice from the community voice library&lt;/td&gt;
&lt;td&gt;400: "You need to be on the creator tier or above to use this voice."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instant voice cloning&lt;/td&gt;
&lt;td&gt;Not tried; the subscription response reports &lt;code&gt;can_use_instant_voice_cloning: false&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Failed requests did not use credits. The 21 default voices and 128 kbps MP3 all worked. The subscription response also lists a limit of 3 custom voices on our free account.&lt;/p&gt;

&lt;p&gt;The other limit is the licence. On ElevenLabs' pricing page the Commercial License is listed from the Starter plan up, not on Free, so a free key is for building and testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs after the free credits
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan or billing&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Credits or characters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;10,000 credits a month, no rollover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Starter&lt;/td&gt;
&lt;td&gt;$6 a month (a $1 first month was on offer until 1 Nov when we checked)&lt;/td&gt;
&lt;td&gt;30,000 credits a month, commercial licence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Creator&lt;/td&gt;
&lt;td&gt;$22 a month ($11 the first month)&lt;/td&gt;
&lt;td&gt;121,000 credits a month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API, pay as you go&lt;/td&gt;
&lt;td&gt;$0.08 per 1,000 characters on v4, v3 and Multilingual v2; $0.04 on Flash/Turbo&lt;/td&gt;
&lt;td&gt;billed in dollars, not credits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Prices exclude tax, according to the pricing page. At the Flash rate our 140-character sentence costs well under a cent: $0.04 per 1,000 characters is about $0.0056 for 140.&lt;/p&gt;

&lt;h2&gt;
  
  
  What worked
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;One environment variable and a header: the first request worked without an SDK.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;character-cost&lt;/code&gt; header gave an exact cost per call immediately, which the subscription endpoint did not.&lt;/li&gt;
&lt;li&gt;The per-key credit cap is a cheap safety net. Ours capped the test at 2,000 of the month's 10,000 credits.&lt;/li&gt;
&lt;li&gt;Every limit we hit came back with a readable message that names the plan you need.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What didn't work
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The usage counter was not real-time. If you meter your own users from &lt;code&gt;/v1/user/subscription&lt;/code&gt;, you will undercount; read the response header instead.&lt;/li&gt;
&lt;li&gt;Multilingual v2 accepted Vietnamese text and charged full price for unusable audio.&lt;/li&gt;
&lt;li&gt;One sentence per model is enough to spot a broken language, not to rank voice quality. We did not run long texts, many voices or a listening test.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Our verdict
&lt;/h2&gt;

&lt;p&gt;If you want to try ElevenLabs from code, a free API key is enough: it runs the newest model, v4, and the cheap Flash model, returns usable 128 kbps audio, and its limits are clear. Put a credit cap on the key, keep it server-side, and log the &lt;code&gt;character-cost&lt;/code&gt; header rather than trusting the usage counter. For a language other than English, check that it is in the model's list first: Flash v2.5 was the cheapest and fastest model that read our Vietnamese correctly. Pay when you need commercial use, higher-quality formats or library voices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is the ElevenLabs API key free?
&lt;/h3&gt;

&lt;p&gt;Yes. A free account can create API keys and uses the plan's 10,000 monthly credits. On Flash v2.5 that was 0.5 credits per character in our test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where do I find my ElevenLabs API key?
&lt;/h3&gt;

&lt;p&gt;In the ElevenLabs web app under Developers → API Keys. You can create several keys and limit each one by endpoints, credits and IP addresses.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I use the ElevenLabs API key?
&lt;/h3&gt;

&lt;p&gt;Send it in an &lt;code&gt;xi-api-key&lt;/code&gt; header, for example on &lt;code&gt;GET https://api.elevenlabs.io/v1/models&lt;/code&gt;. Keep it on a server; ElevenLabs says not to put it in browser or app code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use ElevenLabs v4 with a free API key?
&lt;/h3&gt;

&lt;p&gt;In our test, yes: Eleven v4 returned audio on a free key and cost 1 credit per character.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use the free ElevenLabs API commercially?
&lt;/h3&gt;

&lt;p&gt;ElevenLabs' pricing page lists the Commercial License from the Starter plan up, not on Free.&lt;/p&gt;




&lt;p&gt;Original article with the full tables and sources: &lt;a href="https://ranthis.com/guides/elevenlabs-api-key" rel="noopener noreferrer"&gt;https://ranthis.com/guides/elevenlabs-api-key&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>texttospeech</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Claude Haiku vs Sonnet 5.5: 18x Cheaper and Just as Accurate in a Three-Task API Test</title>
      <dc:creator>RanThis</dc:creator>
      <pubDate>Sat, 24 Oct 2026 01:18:53 +0000</pubDate>
      <link>https://dev.to/ranthis/claude-haiku-vs-sonnet-55-18x-cheaper-and-just-as-accurate-in-a-three-task-api-test-4d1c</link>
      <guid>https://dev.to/ranthis/claude-haiku-vs-sonnet-55-18x-cheaper-and-just-as-accurate-in-a-three-task-api-test-4d1c</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ranthis.com/guides/claude-haiku-vs-sonnet?utm_source=devto&amp;amp;utm_medium=crosspost&amp;amp;utm_campaign=claude-haiku-vs-sonnet" rel="noopener noreferrer"&gt;ranthis.com&lt;/a&gt;. The scripts and raw answers are in the &lt;a href="https://github.com/ranthishq/ranthis-public-repo/tree/main/tests/claude-haiku-vs-sonnet" rel="noopener noreferrer"&gt;public repo&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We gave Claude Haiku 5.5 and Sonnet 5.5 the same three office tasks through the API and graded them with code. Both scored 15/15, but Haiku was faster and cost 18 times less.&lt;/p&gt;

&lt;p&gt;By the &lt;a href="https://ranthis.com/about" rel="noopener noreferrer"&gt;RanThis team&lt;/a&gt;, written with AI assistance · Updated October 17, 2026 · 6 min read&lt;/p&gt;

&lt;p&gt;Why trust this: every result, number and screenshot comes from a real run on our own accounts, not from the AI. &lt;a href="https://ranthis.com/how-we-test" rel="noopener noreferrer"&gt;How we test&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In our Claude Haiku vs Sonnet test, Claude Haiku 5.5 matched Claude Sonnet 5.5 on three short office tasks: both scored 15/15 on code-graded checks. Haiku also finished faster (11.7 s vs 15.7 s in total) and cost 18 times less ($0.00129 vs $0.02357). Sonnet's edge never showed up on these tasks; long, multi-step work and coding were not tested.&lt;/p&gt;

&lt;p&gt;Tested on 13 October 2026 by calling the Claude API directly with &lt;code&gt;claude-haiku-5-5&lt;/code&gt; and &lt;code&gt;claude-sonnet-5-5&lt;/code&gt;, each at its default effort (Haiku: medium, Sonnet: high). Each task ran once, so this is a real-world observation, not a statistic. The tasks use made-up data and were written in Vietnamese, so this is also a test with non-English content. Prices come from Anthropic's official pricing page on the same day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch the real run (Vietnamese narration):&lt;/strong&gt; &lt;a href="https://youtu.be/AqLwBZqVld8" rel="noopener noreferrer"&gt;https://youtu.be/AqLwBZqVld8&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key results
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy:&lt;/strong&gt; Haiku 5.5 and Sonnet 5.5 both scored 15/15 items graded by code (5 invoice fields, 6 commission figures, 4 email conditions).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; 11.7 seconds for all three tasks on Haiku vs 15.7 seconds on Sonnet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; $0.00129 on Haiku vs $0.02357 on Sonnet, an 18× gap. Scaled to 1,000 runs of these tasks, that is about $1.30 vs about $23.60.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instruction following:&lt;/strong&gt; each model slipped once on formatting. Sonnet ignored "No explanation" on the commission task; Haiku added a "[Company name]" signature after the hotline that was supposed to end the email.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Claude API pricing: Haiku 5.5 vs Sonnet 5.5
&lt;/h2&gt;

&lt;p&gt;On the price list, Claude Haiku 5.5 costs a twentieth of Claude Sonnet 5.5.&lt;/p&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;Claude Haiku 5.5&lt;/th&gt;
&lt;th&gt;Claude Sonnet 5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Input price (per million tokens)&lt;/td&gt;
&lt;td&gt;$0.10 (prompts up to 100,000 tokens)&lt;/td&gt;
&lt;td&gt;$2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Output price (per million tokens)&lt;/td&gt;
&lt;td&gt;$0.50 (prompts up to 100,000 tokens)&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic's description&lt;/td&gt;
&lt;td&gt;Released 7 October 2026. For high-volume, latency-sensitive tasks such as classification, extraction and routing&lt;/td&gt;
&lt;td&gt;The best combination of speed and intelligence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;One Haiku 5.5 caveat: prompts &lt;strong&gt;over 100,000 tokens&lt;/strong&gt; cost $0.50 input and $2.50 output per million tokens. Sonnet 5.5 keeps one price across its full 1M-token window. Sources: Anthropic's &lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt; and the &lt;a href="https://platform.claude.com/docs/en/models/haiku-5-5/overview" rel="noopener noreferrer"&gt;Claude Haiku 5.5 overview&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we tested Claude Haiku vs Sonnet
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Three office tasks&lt;/strong&gt;, with answers worked out by hand before running:  Read a messy email and extract invoice details as JSON. Traps: a mistyped amount that was later corrected, an old company name, and a due date written in words. Work out tiered sales commission for 5 staff: 2% / 4% / 6% by tier, plus a 1 million VND bonus for sales of 150 million VND or more with no returns. Traps: one person at exactly 200 million, one at 149.5 million (500,000 short of the bonus), and one with enough sales but a returned order. Write a reply to a customer whose order arrived late: at most 120 words, a 10% discount code, no promised delivery date, and end with the hotline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The same prompt&lt;/strong&gt; sent to each model through the API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code grades each item&lt;/strong&gt;: 5 invoice fields, 6 commission figures, 4 email conditions. That is 15 items per model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real measurements&lt;/strong&gt;: time from request to response, token counts reported by the API, and cost calculated from the price list.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Results task by task
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Task 1: invoice extraction (JSON)
&lt;/h3&gt;

&lt;p&gt;Both models returned the same JSON with all 5 fields right: tax code, pre-tax amount of 12,450,000 VND (not the mistyped figure), tax of 996,000, total of 13,446,000, and a due date of 24 October 2026. Haiku took 3.9 seconds, Sonnet 5.2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252Fe2ef4b96fcf14d0c86827bba540344d4%252Fde1.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252Fe2ef4b96fcf14d0c86827bba540344d4%252Fde1.png%26w%3D3840%26q%3D75" alt="Terminal output: the invoice JSON Claude Haiku 5.5 returned in 3.9 seconds, with all 5 fields graded correct by code" width="1754" height="1030"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terminal output: the invoice JSON Claude Haiku 5.5 returned in 3.9 seconds, with all 5 fields graded correct by code&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Task 2: tiered sales commission
&lt;/h3&gt;

&lt;p&gt;Both got all 6 figures right, and neither paid the bonus to the person who was 500,000 short. The difference was in following the instruction "No explanation": Haiku returned only the table, while Sonnet wrote out its full working before the table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252F10336d4d50f740c0a2951f75d2f72102%252Fhoahong.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252F10336d4d50f740c0a2951f75d2f72102%252Fhoahong.png%26w%3D3840%26q%3D75" alt="Commission answers side by side: Haiku 5.5 gives only the table, Sonnet 5.5 writes out its working before the table" width="1800" height="855"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Commission answers side by side: Haiku 5.5 gives only the table, Sonnet 5.5 writes out its working before the table&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Task 3: customer apology email
&lt;/h3&gt;

&lt;p&gt;The two drafts are very similar: 110 and 113 words. Both apologize, give the warehouse move as the reason, offer the 10% code and promise no date. Sonnet added a subject line and put the hotline on the last line as asked. Haiku put a "[Company name]" signature after the hotline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252Fd334e6e127f645df942f380241e72aa3%252Femail.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252Fd334e6e127f645df942f380241e72aa3%252Femail.png%26w%3D3840%26q%3D75" alt="The two customer emails side by side: Haiku 5.5 at 110 words, Sonnet 5.5 at 113 words, both with the 10% code and the hotline" width="1800" height="781"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The two customer emails side by side: Haiku 5.5 at 110 words, Sonnet 5.5 at 113 words, both with the 10% code and the hotline&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Haiku 5.5 vs Sonnet 5.5: equally correct, 18× the cost
&lt;/h2&gt;

&lt;p&gt;Across all three tasks, the Claude Haiku vs Sonnet totals look like this:&lt;/p&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;Haiku 5.5&lt;/th&gt;
&lt;th&gt;Sonnet 5.5&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Correct (graded by code)&lt;/td&gt;
&lt;td&gt;15/15&lt;/td&gt;
&lt;td&gt;15/15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total time, 3 tasks&lt;/td&gt;
&lt;td&gt;11.7 s&lt;/td&gt;
&lt;td&gt;15.7 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total cost, 3 tasks&lt;/td&gt;
&lt;td&gt;$0.00129&lt;/td&gt;
&lt;td&gt;$0.02357&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;These 3 tasks × 1,000 (scaled from the measurement)&lt;/td&gt;
&lt;td&gt;about $1.30&lt;/td&gt;
&lt;td&gt;about $23.60&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Why 18× and not the 20× on the price list? Haiku used slightly more output tokens (thinking included): 674, 800 and 909 tokens, versus Sonnet's 640, 626 and 899.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252F1ad3e33b72494c3aa67ae7e7dec32630%252Fcover.png%26w%3D3840%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Franthis.com%2F_next%2Fimage%3Furl%3Dhttps%253A%252F%252Fapi.dunggi.vn%252Fmedia%252Fimages%252F2026%252F10%252F1ad3e33b72494c3aa67ae7e7dec32630%252Fcover.png%26w%3D3840%26q%3D75" alt="Terminal summary: Haiku 5.5 and Sonnet 5.5 both score 15/15; Haiku took 11.7 s and cost $0.00129, Sonnet took 15.7 s and cost $0.02357" width="1754" height="1030"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Terminal summary: Haiku 5.5 and Sonnet 5.5 both score 15/15; Haiku took 11.7 s and cost $0.00129, Sonnet took 15.7 s and cost $0.02357&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The comparison code (Python)
&lt;/h2&gt;

&lt;p&gt;Below is the API call and cost calculation from the script we used (Python, &lt;code&gt;httpx&lt;/code&gt;). Each task sends the same &lt;code&gt;prompt&lt;/code&gt; to both models. A separate function compares the reply with the expected answer: it parses the JSON and checks each field (task 1), takes the last number on each table row (task 2), and counts words and looks for "10%", the hotline and any dates (task 3).&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;time&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;httpx&lt;/span&gt;

&lt;span class="n"&gt;PRICES&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;claude-haiku-5-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-5-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;2.00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;10.00&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;  &lt;span class="c1"&gt;# USD per million tokens
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask&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="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;started&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;monotonic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;httpx&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.anthropic.com/v1/messages&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="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic-version&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;2023-06-01&lt;/span&gt;&lt;span class="sh"&gt;"&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;model&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;role&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;user&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&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;300&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="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&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="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reply&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&lt;/span&gt;&lt;span class="sh"&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;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&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;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;usage&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;price_in&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price_out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PRICES&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="n"&gt;cost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_tokens&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="n"&gt;price_in&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e6&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output_tokens&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="n"&gt;price_out&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;1e6&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;text&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;monotonic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;started&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cost&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We ran the same three-task method on Google's models too: see &lt;a href="https://ranthis.com/guides/gemini-4-argon-vs-flash" rel="noopener noreferrer"&gt;Gemini 4 Argon vs Gemini 3.8 Flash&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limits of this test
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Each task ran once.&lt;/strong&gt; A rerun may word things differently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All tasks were short with clear answers.&lt;/strong&gt; Long multi-step work, coding and large-document analysis were not tested. That is where a larger model usually has an edge, and it needs its own test.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Very long prompts&lt;/strong&gt; (over 100,000 tokens) make Haiku five times more expensive, narrowing the gap with Sonnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Is Claude Haiku 5.5 good enough? Picking a model for repeated work
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Short, well-defined tasks&lt;/strong&gt; (extraction, rule-based calculation, templated writing): try Haiku first. In this test it matched Sonnet, ran faster and cost 18 times less, which makes it the cheapest Claude model worth starting with for this kind of work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a few lines of code to check the output&lt;/strong&gt;, as this test does, so you know the cheaper model is good enough for your work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For harder work, compare Claude Haiku vs Sonnet on your own tasks.&lt;/strong&gt; With the API, switching models is a one-line change to &lt;code&gt;model&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you have a Claude Max plan, you can run tests like this with its included API credit: see &lt;a href="https://ranthis.com/guides/claude-max-api-credits" rel="noopener noreferrer"&gt;how to claim Claude Max API credits&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How much does Claude Haiku 5.5 cost?
&lt;/h3&gt;

&lt;p&gt;$0.10 per million input tokens and $0.50 per million output tokens for prompts up to 100,000 tokens; $0.50 and $2.50 above that. The Batch API is 50% off. Prices are from Anthropic's official pricing page on 13 October 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Haiku 5.5 worse than Sonnet 5.5?
&lt;/h3&gt;

&lt;p&gt;Not on the three short office tasks in this test: both scored 15/15 items graded by code, and each slipped once on formatting. Long, multi-step work and coding were not tested.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much more does Sonnet cost than Haiku?
&lt;/h3&gt;

&lt;p&gt;20 times by the price list, for prompts up to 100,000 tokens. In this test the actual total differed by 18 times ($0.02357 versus $0.00129), because Haiku used slightly more output tokens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which was faster, Claude Haiku or Sonnet?
&lt;/h3&gt;

&lt;p&gt;Haiku 5.5. It finished all three tasks in 11.7 seconds versus 15.7 seconds for Sonnet 5.5; on the invoice task alone it took 3.9 seconds versus 5.2.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can I compare two Claude models myself?
&lt;/h3&gt;

&lt;p&gt;Prepare a few tasks with known answers, send the same prompt to each model through the API, and let code compare the replies with the answers. Record the time and the &lt;code&gt;usage&lt;/code&gt; token counts from the API response to work out cost from the price list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://platform.claude.com/docs/en/about-claude/pricing" rel="noopener noreferrer"&gt;Claude API — Pricing&lt;/a&gt;Vendor page&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://platform.claude.com/docs/en/models/haiku-5-5/overview" rel="noopener noreferrer"&gt;Claude Haiku 5.5 — model overview&lt;/a&gt;Vendor document&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://platform.claude.com/docs/en/about-claude/models/overview" rel="noopener noreferrer"&gt;Claude models overview&lt;/a&gt;Vendor document&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
      <category>python</category>
    </item>
  </channel>
</rss>
