Currencies

Monetary amounts must be sent to Ravelin in the currency’s ISO 4217 minor units.

For example, for US dollars, to specify $10.50 (USD), you should send 1050.

{
    "currency": "USD",
    "amount": 1050
}

Other currencies, such as the Japanese Yen, or the Vietnamese Dong, are not considered in their minor units.

For example, to specify ¥300 (JPY), you should send 300.

{
    "currency": "JPY",
    "amount": 300
}

The Malagasy ariary and the Mauritanian ouguiya are both subdivided into fifths, and so the amount should be multiplied by 5 before sending to Ravelin.

For example, to specify 1.2 ouguiya (MRU), you should send 6.

{
    "currency": "MRU",
    "amount": 6
}

Ravelin uses the transformations defined by the exponents in ISO 4217, interpreted as:

func CurrencyToBasicMultiplier(currency string) int {
	switch currency {
	case "BIF", "CLP", "CVE", "DJF", "GNF", "ISK", "JPY", "KMF",
		"KRW", "PYG", "RWF", "UGX", "UYI", "VND", "VUV", "XAF",
		"XOF", "XPF":
		return 1
	case "MGA", "MRU":
		return 5
	case "BHD", "IQD", "JOD", "KWD", "LYD", "OMR", "TND":
		return 1000
	}
	return 100
}

Note, ISO 4217 differs from both the “Number to basic” column from Wikipedia - List of Circulating Currencies, and the POSIX standard in different places. It may also differ from your PSP’s handling of these currencies. For example, Braintree handles the Lao kip (LAK) without subdivision, while ISO 4217 and Stripe do.