Both. IMO you should have a plan where the user pays e.g. $7 and when the resources for it are drained, you start refusing requests until the throttle period expires.
It's extremely useful to prototype and experiment with a project and have it have a total budget that will not be surpassed.
One more idea: pay as you go. I pay $10, that turns out to be not enough, I pay another $20 and get immediately unblocked.
Makes sense. We're going to do #1 for sure. #2 is more difficult because we have to be cognizant of or internal costs. But will share with the team nonetheless. Thank you.