Multi-Currency Billing
Subscribd supports per-customer billing currencies. A customer can be billed in EUR while another is billed in USD — on the same account and gateway.Gateway support
Not all gateways support multiple billing currencies on a single account:| Gateway | Multi-Currency |
|---|---|
| Stripe | ✅ Yes |
| PayPal | ✅ Yes |
| Paddle | ✅ Yes (via storefront currency) |
| FastSpring | ✅ Yes (MoR handles it) |
| Braintree | ⚠️ Limited — depends on merchant account config |
| Square | ❌ No — single currency per location |
supportsMultiCurrency() returns false. Attempting to create a subscription in a currency that differs from the gateway’s default will throw SubscriptionException.
Setting the billing currency
OverridebillingCurrency() on your Billable model:
ManagesBilling reads the currency from the user’s most recent active subscription, falling back to config('subscribd.currency', 'USD').
Currency storage
EachSubscription record stores its own currency column. Once a customer subscribes in a currency, all subsequent operations on that subscription (charges, refunds, credits) use that same currency.
Invoice records store both total (minor units) and currency.
The Money value object
Subscribd usesPixelworxio\Subscribd\Support\Money internally to carry amount + currency together:
Money in:
BillingGateway::charge()— accepts aMoneyargumentProcessRefund::execute()— accepts an optionalMoneyargument for partial refundsBillingGateway::refundInvoice()— receives?Money $amount
Plan currencies
Plans define a basecurrency column. When creating a subscription, the resolved billingCurrency() must match the plan currency unless the gateway supports on-the-fly currency conversion.
Credits and currency
Credits are per-currency. A EUR credit cannot be applied to a USD invoice:creditBalance(string $currency): int returns the balance for a specific currency.
Zero-decimal currencies
Currencies like JPY, KRW, and VND have no minor units. Subscribd handles zero-decimal currencies automatically:Money::of(500, 'JPY')is ¥500 (not ¥5.00)- Gateway drivers format amounts accordingly when making API calls
Money class handles zero-decimal formatting at the gateway boundary.