Steps 3-6: Exchange rates

Step 3: Request rates from Nexus

  1. Once the Sender has entered either Source Currency Amount or Destination Currency Amount, the PSP should use the GET /quotes/ API operation to retrieve quotes (see FX Service APIs for more detail).

In the case that the PSP is also an FXP, they should still use this quote to retrieve current rates, as Nexus will generate a quote ID specific to this payment which must be referenced in the pacs.008 payment instruction. Without this quote ID, the exchange rate cannot be validated and the payment will fail.

  1. Nexus will retrieve rates for the currency and country pair selected

  2. For each rate, Nexus will:

    1. automatically apply any improvements offered by that FXP based on size of the transaction or the PSP requesting the rate. (See Tier-based improvements and PSP-based improvements for more detail.)

    2. check that the Source Currency Amount and Destination Currency Amount (at the given rate) do not exceed the MaxAmt values in either the Source or Destination IPS, and adjust those values if they do.

    3. calculate the amounts, in Source and Destination Currency, that can be sent at this rate. These are defined in the following fields in the response to GET /quotes/:

      1. AdjustedSourceAmount

      2. AdjustedDestinationAmount

    4. Where the Source Currency Amount or Destination Currency Amount provided by the Sender exceeds the MaxAmt of the respective IPS, Nexus will apply whichever cap is the smaller at the current rate. This means the AdjustedSourceAmount and AdjustedDestinationAmount will never exceed the maximum that can be sent through the relevant IPS.

  3. Nexus will then return the full list of adjusted and improved rates, with Quote Ids that are unique to this GET /quotes/ request. The Quote Id must be referenced when the PSP submits the pacs.008 payment instruction (or the domestic equivalent).

WORKED EXAMPLE: Caps on maximum transaction value

A Sender wishes to send a payment of SGD 210,000 from Singapore to Italy.

  • The Sender enters this value into the SourceCurrencyAmount field, and the Source PSP sends it to the GET /quotes/ API operation

  • Nexus retrieves:

    • the current (base) rates for SGD>EUR payments

    • the MaxAmt values for both the Source UPS and Destination UPS

  • The largest value that can be sent from the Singaporean payment system is SGD200,000, so the AdjustedSourceCurrencyAmount is reduced to SGD 200,000

  • At the exchange rate offered in the first quote, SGD 1 = EUR 0.67

    • Therefore SGD 200,000 = EUR 134,000 at this rate

  • However, since the payment in Italy is governed by the SCTInst (SEPA Credit Transfer Instant) scheme, the maximum value that can be received is EUR 100,000

  • Nexus calculates that EUR 100,000 = SGD 149,253

  • Nexus adds the following information to the specific rate:

    • AdjustedSourceCurrencyAmount = SGD 149,253

    • AdjustedDestinationCurrencyAmount = EUR 100,000

    • AdjustedReason = [SourceCurrencyAmountExceeded, DestinationCurrencyAmountExceeded]

  • Nexus will now calculate whether any tier-based improvements apply to this quote, using the AdjustedSourceCurrencyAmount (SGD 134,000) rather than the original requested Source Currency Amount (SGD 210,000)

  • When the quote list is returned to the Source PSP, the Source PSP will:

    • select the preferred rate

    • Update the Source and Destination Currency Amount fields in the Sender’s app with the AdjustedSourceAmount and AdjustedDestinationAmount

    • Add a message to the effect of “The maximum we can send to Italy in a single payment is EUR 100,000, so we’ve adjusted the amounts accordingly.”

The GET /quotes/API must be called again every time the Sender changes either the Source Currency Amount or Destination Currency Amount, since changes in the transaction value may (a) breach the maximum transaction value or (b) qualify for different size-based improvements to the rate.)

Step 4: Selecting the preferred quote

  1. The PSP selects the quote that the PSP wishes to use (from any FXP with which is has already onboarded). This could be the best quote available or a quote from a preferred FX Provider.

  2. The PSP does not show the list of quotes to the Sender.

In the case that the PSP also acts as an FX Provider, the PSP can select its own quote. Please note that when the PSP selects itself as FX Provider, the PSP need to have quotes registered as an FX Provider in Nexus. See PSPs who are also FXPs.)

Complications can arise when there are two or more IPSs in the Destination Country, and some quotes are only valid for one of those IPSs. See Selecting quotes when there are multiple IPSs in one country for details.

Step 5: Marking up FX Rates

The PSP can also add a markup to the FX rate before it is shown to the Sender. PSPs may wish to mark up the FX rate they are provided by the FX Provider instead of (or in addition to) charging a transaction fee.

The Nexus pacs.008 when markups are used

When the PSP applies a markup to the FX rate, the pacs.008 message should use the following elements in a specific way:

  • Instructed Amount = the amount deducted from the Sender’s account

  • Exchange rate = 1.5000 (the exchange rate agreed between the Source PSP and the FX Provider, as defined in the Source PSP’s preferred quote provided by Nexus

  • Interbank Settlement Amount = the amount the Source PSP actually transfers to the FXP’s Settlement Account Provider (rather than the amount deducted from the Sender’s account, which will be higher to account for the FX markup)

WORKED EXAMPLE: Marking up FX rates

Here is a worked example explaining how the Source PSP can mark up the exchange rate:

  1. The Sender enters the Source Currency Amount, EUR 100

  2. The Source PSP

    1. requests a quote for EUR to SGD

    2. selects their preferred quote with the exchange rate of 1.5000

  3. The Source PSP intends to mark up the FX rate.

    1. They charge the customer the exchange rate of 1.4000 (a worse rate than the 1.5000 they receive from the FX Provider)

    2. EUR 100 * 1.4000 = SGD 140, so the Destination Currency Amount is SGD 140.

    3. To ensure the Recipient receives SGD 140, the Source PSP must transfer (SGD 140 / 1.5000) = EUR 93.33

      1. (The FX rate charged by the FXP to the PSP is used in this calculation.)

  4. The Source PSP displays the following to the Sender:

    1. Source Currency Amount = EUR 100

    2. Exchange rate = 1.4000

    3. Destination Currency Amount = SGD 140

  5. The Source PSP sets up an ISO 20022 pacs.008 message with the following values:

    1. Instructed Amount = EUR 100 (the amount deducted from the Sender’s account)

    2. Exchange rate = 1.5000 (the exchange rate agreed between the Source PSP and the FX Provider)

    3. Interbank Settlement Amount = EUR 93.33 (the amount the Source PSP actually transfers to the FXP’s Settlement Account Provider)

  6. As a consequence, the Source PSP retains revenue of EUR 6.67 as payment for the service, and pays EUR 93.33 to the FX Provider.

  7. When Nexus receives the message from the Source IPS, it will apply the Exchange Rate (validated against the original quote) to the Interbank Settlement Amount of EUR 93.34:

EUR 93.34 * 1.5000 = SGD 140.00

  1. Before Nexus sends the payment instruction to the Destination IPS, it updates the Interbank Settlement Amount to SGD 140.00. This become the amount that is credited to the Recipient’s account.

  2. (Note that the Nexus Scheme rulebook does not allow the Destination PSP to make deductions from the amount they receive; if they wish to charge the Recipient a fee for receiving the payment, this must be processed as a separate line item.)

Step 6: Display the exchange rate and amounts to the Sender

Now the exchange rate and Source Currency Amount and Destination Currency Amount can be shown to the Sender:

  • If the Source PSP does not plan to mark up the FX rate offered to the Sender, it can simply use the AdjustedSourceAmount and AdjustedDestinationAmount fields in the quote response to update the Source Currency Amount and Destination Currency Amount fields in the app.

  • If the Source PSP plans to mark up the FX rate offered to the Sender, it should calculate the Effective Rate (ie. Preferred rate from Nexus * PSP’s Markup = Effective rate)

    • If the Sender defined the Source Currency Amount, the AdjustedSourceAmount should be multiplied by the (Effective) Rate to get the Destination Currency Amount

    • If the Sender defined the Destination Currency Amount, the AdjustedDestinationAmount should be divided by the (Effective) Rate to get the Source Currency Amount

The Source PSP should confirm whether the amount originally requested by the Sender has been capped (because it exceeds the maximum amount in either the Source IPS or Destination IPS):

  • If the Sender defined the Source Currency Amount, AND this amount is greater than the AdjustedSourceAmount, the Source PSP should add a notice to the Sender that the amounts have been adjusted to the maximum value that can be sent.

  • If the Sender defined the Destination Currency Amount AND this amount is greater than the AdjustedDestinationAmount, the Source PSP should add a notice to the Sender that the amounts have been adjusted to the maximum value that can be sent.

  • The effective exchange rate applied (after any markup added by the PSP) should also be shown to the Sender

WORKED EXAMPLE: Data stored by the app

This JSON gives an example of the data that the PSP's app will need to store whilst the payment is being set up, based on the examples shown. We can now add the Quote Id, Rate, and Adjusted Source Currency Amount and Adjusted Destination Currency Amount.

// Example payment object stored in PSP's app
"payment": {
        "destinationCountry": "SG", // destination country
        "destinationCurrency": "SGD"  // destination currency
        "amountCurrency": "SGD" // the Sender specified the Destination Currency Amount, not Source Currency Amount 
        "amount": 150, // value of the payment, in AmtCcy
        "quote": { 
                "quoteId": "05201109-1cf1-42ba-b661-32d9f6bc8b63", // Quote Id provided by Nexus
                "adjustedSourceAmount": 100, // Nexus calculated this value for the quote
                "adjustedDestinationAmount": 150, // value not capped by Nexus
                "rate": 1.5000
        }
}

Last updated