That’s pretty common. While I agree it’s not ideal for users, having credits that never expire is a headache for businesses. They’d effectively owe you compute forever, which complicates accounting. It also makes pricing changes harder, since people could keep using credits they bought at much lower prices. And, of course, if credits expire before they’re used, the company ends up keeping the money without having to provide the service. At least OpenAI shows you the expiration of your credits pretty easily...
Headache is just an excuse. Accounting for uncollectible receivables and their inverse has a standard accounting practice.
"Not ideal for users" is a fun way to describe what is essentially theft.
They should do refunds if they don’t like holding it.