The exchange rate is not the interesting part
Every South African team building on AI starts by converting the per-token price to rands and deciding it looks affordable. That number is real, but it is rarely the number that ends up on the invoice.
Where the cost actually goes
Three things dominate, and none of them appear on a pricing page.
The first is context. Teams underestimate how much of each request is conversation history rather than the user's actual question. A chat feature that feels cheap in testing gets expensive once real sessions run twenty turns deep, because every turn re-sends everything before it.
The second is retries. Latency from Johannesburg to a US region is high enough that aggressive timeouts cause retries, and a retried request costs exactly as much as one that succeeded.
The third is model choice by default rather than by decision. Most workloads that reach for a frontier model do not need one — classification, extraction and routing are usually well served by something an order of magnitude cheaper.
What to do about it
Measure cost per completed user task, not cost per token. The token price is the only number the provider gives you and the least useful one you have. A task that takes four cheap calls beats one expensive call that needs a retry, and you will not see that in a pricing table.
Then route deliberately. Send the cheap work to cheap models and reserve the expensive ones for the requests that genuinely justify them. That single change tends to move spend more than any amount of prompt trimming.
