can I pause my app so I stop getting charged?

The charge on stopped machines is so low that, in my view, it’s not worth scaling them to zero. Just stop them and start them again when you want to use them.

There is also a suspend mode, though I assume suspended machines are charged at the same price as running ones.

So yes, there’s a command for this. If the console command is suited to your use-case, do flyctl machine stop <machineid>. Or use the RESTful API.