UtteraUttera

The voice cache: what it is, what it isn't, and how to opt out

September 15, 2026

When you turn text into speech, we keep the resulting audio for 60 minutes. If within that hour you ask for exactly the same thing, we serve it from disk in milliseconds instead of synthesizing it again, and it costs you 10%.

That's everything it does. Like anything that stores a customer's data, it deserves a full explanation and not a line in the terms of service.

Why it's there: the saving is yours

Synthesizing speech consumes GPU, and we charge per second of GPU. Serving an already-generated audio file consumes practically nothing, so it would make no sense to charge you the same for it.

Hence the 10%. It isn't a promotional discount: it's roughly what it costs to hand you a file that already exists.

And the real case it answers isn't far-fetched. It's the phone system announcement generated a hundred times in one afternoon. It's the developer testing the same sentence twenty times in a row while tuning the speed. It's the template of an automatic email that always says the same thing. In all of those, spending a graphics card again to produce a file identical to the one from ten minutes ago is throwing your money away.

What one hour does not mean

This is where it pays to be precise, because "we keep your audio for an hour" sounds worse than it is.

A cache is not an archive somebody browses. It's an exact-match table: same text, same voice, same format, same speed. Change one comma and it's a different entry. Nobody reads it, nobody walks it, nobody indexes it. The only thing that can come out of there is the same file returned to whoever asked for exactly the same thing.

Put another way: that hour is not an hour of access to your data. It's the window in which a request identical to yours saves the GPU.

And it isn't a promise about what we'll do with it, because the rest is already written: your audio and your text train no model, aren't aggregated into statistics and aren't "anonymized" for reuse. The cache opens no door to any of that.

It expires and it really is deleted

A detail that isn't always honoured when somebody says "we keep it for an hour": there are two designs that look very similar in the code and nothing alike in practice.

We have the second. There is a periodic sweep that removes expired files from disk, not just a read condition that stops accepting the file. One hour means one hour.

How to opt out

Some work can't have the audio sitting on someone else's disk even for an hour: clinical dictation, legal notes, a personal message. For those, the cache is switched off per request, without asking our permission, without changing plan and without touching your account. Three equivalent ways:

# 1) In the JSON body
-d '{"model":"tts-1","input":"Private notes","voice":"nova","cache":false}'

# 2) As a form field (accepts 0 / false / no / off)
-F input="Private notes" -F voice=nova -F cache=false

# 3) With the plain old HTTP header, without touching the body
-H "Cache-Control: no-cache"

The audio is generated and delivered to you all the same. What doesn't happen is anything being written to or read from disk. You pay full price, which is exactly what it costs.

And you don't have to take our word for it: every response tells you what was done.

X-Cache What happened
HIT Served from cache. Costs 10%.
MISS Generated and stored for the next hour.
BYPASS You asked without cache: generated and nothing stored.
ADHOC Voice cloned on the fly. Never cached, whether you ask or not.
DISABLED The cache is switched off on the server.

Look at ADHOC. When you clone a voice from a sample you supply, that audio doesn't enter the cache even if you say nothing. It didn't seem reasonable to us that the default decision in the most sensitive case should depend on the customer remembering.

A trade-off, and the right to refuse it

Every cache is a trade: you give up a little control over where a piece of data lives in exchange for speed and money. It's a good trade for most uses, and that's why it's on by default.

But it's your trade, not ours, so you have to be able to undo it — and undo it request by request, not by opening a ticket or subscribing to a higher plan. A privacy option that requires negotiating isn't a privacy option.

If you want the exact detail, it's in the services documentation, with the response codes and the complete examples.

Anything to add or correct? Write to support@uttera.ai. If you correct us, we edit the post and credit you.

← All posts