Selecting a currency

Learn how to determine whether a currency is supported and how it is prioritized.

Checkouts require a currency that conforms to the ISO 4217 standard.

However, not all currencies contained in the ISO 4217 list are supported in the Digital River APIs. Instead, the currency you pass must be supported by the payment method used to fund the transaction.

You should also remember that the currency you send in a POST/checkouts or POST/checkouts/{id} always takes priority over the value you pass when creating the payment source.

Supported currencies

To access a list of available currencies for each supported payment method, refer to the Payment method guide.

If the currency you send in a create or update Checkout request is not supported by the source, you receive the following error:

{
    "type": "conflict",
    "errors": [
        {
            "code": "currency_unactivated",
            "parameter": "currency",
            "message": "Currency 'PAB' is not activated."
        }
    ]
}

You might also receive a 409 Conflict response that contains a code of invalid_parameter. In this case, the error could have been thrown because currency consisted of incorrect characters, an obsolete, Euro-zone currency, or another currency no longer in circulation.

{
    "type": "bad_request",
    "errors": [
        {
            "code": "invalid_parameter",
            "parameter": "currency",
            "message": "'YEM' is not a valid currency."
        }
    ]
}

How currency is prioritized

For some payment methods, it's required that you set currency in the configuration object of createSource(), while for others it's optional.

However, if you do pass currency, and then attach the source to a checkout, the source's currency doesn't need to match the checkout's currency. Both values just have to be supported by the underlying payment method.

The checkout's currency always takes priority over the source's currency. This means, upon order creation, we generate a charge in the checkout's currency.

The following example demonstrates this concept. In this case, a payment source created in USD is attached to a checkout with a currency of HKD. After the checkout is converted to an order, the order's payment.charges[].currency is also HKD.

{
    "clientId": "gc",
    "channelId": "headless",
    "liveMode": false,
    "id": "721adac5-cbfa-4f4f-989b-58414dd231c3",
    "clientSecret": "721adac5-cbfa-4f4f-989b-58414dd231c3_1e2b0d18-d57f-4033-b4c9-ce1e8a83e7cc",
    "type": "creditCard",
    "reusable": false,
    "owner": {
        "firstName": "William",
        "lastName": "Brown",
        "email": "null@digitalriver.com",
        "address": {
            "line1": "10381 Bren Rd W",
            "city": "Minnetonka",
            "state": "MN",
            "country": "US",
            "postalCode": "55343"
        }
    },
    "state": "chargeable",
    "creationIp": "209.87.180.27",
    "createdTime": "2021-04-30T19:16:51.525Z",
    "updatedTime": "2021-04-30T19:16:51.525Z",
    "flow": "standard",
    "browserInfo": {
        "userAgent": "PostmanRuntime/7.28.0",
        "acceptHeader": "*/*",
        "browserIp": "209.87.180.27"
    },
    "creditCard": {
        "brand": "Visa",
        "expirationMonth": 7,
        "expirationYear": 2027,
        "lastFourDigits": "1111",
        "paymentIdentifier": "00700"
    }
}

Last updated