We will soon be submitting the FenixCommerce app (which calculates and displays accurate delivery dates among other things), and need to figure out how to set up our billing which is a combination monthly subscription fee plus potential per-transaction fees. The structure is as follows (all plans offer a discount if you pay the subscription fee annually, but you still need to pay any txn fees monthly):
- 0 to 1500 orders/month: $299/month plus $0.17/order for more than 1500 orders
- 1501 - 5000 orders/month: $750/month plus $0.15/order for more than 5000 orders
- 5001 - 10000 or more orders/month: $1250/month plus $0.14/order for more than 10000 orders
We also need to charge a one-time set-up fee.
Our dev team will need to understand how to set up the APIs to facilitate this billing model. I've been going back and forth with support about this for about 3 months--initially requesting a billing exemption--and they sent me here.
From what I can tell about how to do this. You would need to create a recurring application charge (https://shopify.dev/docs/admin-api/rest/reference/billing/recurringapplicationcharge/) (this can be for $0.00 if need be) and this gives you a charge ID to work with. Once you have that ID you can create a usage charge (reference here: https://shopify.dev/docs/admin-api/rest/reference/billing/usagecharge) for a custom amount. Essentially this will need to be handled on your back end. What it would entail is every time you have a transaction that needs to be charged for (be it overage or on an each basis) you would need to increment the value for the client/store. If you are trying to bill monthly then you would need to setup a cron job on your server that would run once a month (this would be if you want to bill all clients/stores on the same date, if you want to bill them based on when they install, you would need to also store a bill date in your database and run the cron job daily checking for clients/stores that has a bill date of that date). When the cron job runs it would check your database and total up a custom charge then send the `usageCharge` call to the Admin REST API. Once that is made you would then need to reset the usage count in your database.
Without knowing more about how your app is setup and what stack/languages you are using this is the best explanation I can give. But if you need more information/help setting this up let me know what languages you are working with/how your app is created and I might be able to better assist you.