You Put the Time at the Top of the Prompt and Paid Full Price Every Call
The prompt was long and mostly fixed. Four thousand tokens of instructions, the product manual, a dozen examples. Then the user's question at the bottom. The provider offered prompt caching. Somebody turned it on. The bill did not move. The latency did not move. The dashboard showed almost no cache

Four thousand tokens of instructions, the product manual, a dozen examples.
The dashboard showed almost no cached tokens at all.
The first line of the prompt was the current date and time.
The provider keeps the processed start of your prompt, and a later request can reuse it only if it begins with exactly the same tokens.
The same, from the first token up to the point that was cached.
One different character near the top and everything after it is new again, billed at the full rate and processed from scratch.
A timestamp in line one makes every request different from its first character.
The cache stores a prefix nobody will ever send again.
A list of tools built from a dictionary whose order changes between runs.
A request id somebody added for debugging.
Examples picked at random so the model would see variety.
So order the prompt by how often it changes.
Instructions, tool definitions in a fixed order, reference documents, examples.
Then what changes per request, the date, the user, the question.
The timestamp belongs at the bottom, next to the thing it is about.
Then read the usage block on every response.
It tells you how many input tokens came from the cache.
If that number is near zero on a prompt that is mostly the same, something near the top is moving.
A cache can only help with what you send in the same order twice.
Put the stable part first, and keep it still.