I think your conclusion is correct. You can only sell access to your version. That might include distribution, postage, etc, bandwidth costs if it is on your server, but if you assign it a GPL license you are assigning freedoms that then stop you charging for anything else.
The problem you have here is that you are confusing recouping costs you have voluntarily incurred (time and effort) with being paid for your time. You cannot be paid for your time and effort without agreeing beforehand that the customer will pay for that.
For example, if I ask you to build me something you can charge me an amount per hour for the time it takes you. If you create it first and then try and sell me something you are trying to recoup your costs by selling me the product, but I am paying for the product, not your time.
If you have chosen to give me the freedom to do what I want with that product, once I have it, it is mine. I can give it to everyone else for free. That doesn’t stop you charging for access to your version, you just have to hope that no one figures out they can get it from me.
Charging for the service isn’t better for the user. But it doesn’t contradict anything in the GPL. They are still paying for access but they are paying for something where you can control that access without contradicting the license.
The best thing for the user is for you to GPL the plugin and offer the API for free because they can then get your plugin from another source, pay nothing, and use the API for nothing. It would suck for you though.