Never pass a display-currency amount to Paystack without converting to the smallest unit of the currency you are actually charging. Paystack does not know your price was in dollars: 4900 in a ZAR sale bills R49, not $49, and nothing errors. Keep amounts as integers in minor units from your ledger outward, and require an explicit per-currency amount at every checkout entry point.

Context: Commit 273ae99 in iamgodofall/absuite-core documents a real billing bug the author caught and fixed: Paystack charges the smallest unit of whatever currency it is told, so the code was passing a USD-cents plan price straight into a ZAR sale. Every sale billed R49 instead of $49, about a fifteenth of the intended price, silently on every transaction. The fix was to require an explicit amount for any non-USD currency instead of reusing the catalogue price.