menu

Held FX Rates

TxB APIs allows TxB clients to make FX payments as described on the Make a Payment Guide. You can also find our Executable FX Rates Guide that describes how to lock in an exchange rate before actually sending the payment. This guide describes how to lock in an exchange rate for up to 72 hours before you know your total trade amount, allowing you to extend the settlement window from quote to T+5.

Step by Step Guide

Step 1 - Create an exchange rate quote

First, create a quote. This quote is real-time (it changes throughout the day) and includes all relevant FX fees that you have agreed with TxB.The payment using the FX will likely generate additional fees.When retrieving your FX quote, you need to specify it’s duration. Your options are 24, 36, 48 or 72 hours.

To create a quote, use this API POST /v2/exchangeRates/quotes

{
  "fxTrade": {
    "paymentCurrency": "EUR",
    "sourceCurrency": "USD"
  },
  "liquidityTiming": {
    "tenor": "72_HOURS"
  }
}

Returns this response:

{
    "quoteId": "Q7589",
    "tradeId": null,
    "status": "QUOTED",
    "relatedEntityId": null,
    "expirationTime": "2023-02-24T22:00:00Z",
    "liquidityTiming": {
        "settlementDate": null,
        "tenor": "72_HOURS"
    },
    "fxTrade": {
        "paymentAmount": 1896615.00,
        "paymentCurrency": "EUR",
        "sourceCurrency": "USD",
        "sourceAmount": 2004524.50,
        "fxRate": 1.05689584,
        "fxTimeStamp": null
    },
    "fxTradeUsage": null,
    "fxQuoteUsage": null
}

Step 2 - Decide whether to accept the rate

Now that you created a quote, you can:

  • Book a trade against the quote by accepting it before it expires
  • Leave the quote to expire
  • Request a new quote

If you decide to accept the quote, you have up to 2 business days to make a payment(s) on that trade.

To accept the quote, use this API POST /v2/exchangeRates/quotes/accept

{
  "paymentAmount": 100,
  "quoteId": "Q7589",
  "tradeRequestId": "tradeid0004"
}

Returns this response:

{
    "quoteId": "Q7589",
    "tradeId": "272430",
    "status": "TRADED",
    "relatedEntityId": null,
    "expirationTime": null,
    "liquidityTiming": {
        "settlementDate": "2023-02-28",
        "tenor": null
    },
    "fxTrade": {
        "paymentAmount": 100.00,
        "paymentCurrency": "EUR",
        "sourceCurrency": "USD",
        "sourceAmount": 105.69,
        "fxRate": 1.05689584,
        "fxTimeStamp": null
    },
    "fxTradeUsage": {
        "paymentAmountAvailable": 100.00,
        "sourceAmountAvailable": 105.69,
        "linkedPaymentEndToEndIds": null
    },
    "fxQuoteUsage": null
}

At this point, the currency is now TRADED. Canceling the trade would involve booking an equal and opposite trade which may create a financial loss if rates have changed in an unfavorable direction.


Step 3 - View the current status of the quote or trade

Use this API to get information about your quote or trade. This API will help you know the details of your trade, including trade status, how much of your trade has been utilized and what payments are associated with it. It will help you ensure that the data that the cache in your system about your trade is always accurate.

When you poll for your quote ID, you’ll receive a list of all associated trade IDs. when you poll for your trade ID, you’ll receive a list of associated payment IDs.

POST /v2/exchangeRates/quotes/status

{
  "idType": "QUOTEID",
  "idValue": "Q7589"
}

Returns this response:

{
    "quoteId": "Q7589",
    "tradeId": null,
    "status": "QUOTED",
    "relatedEntityId": null,
    "expirationTime": "2023-02-24T22:00:00Z",
    "liquidityTiming": null,
    "fxTrade": {
        "paymentAmount": 1896615.00,
        "paymentCurrency": "EUR",
        "sourceCurrency": "USD",
        "sourceAmount": 2004524.50,
        "fxRate": 1.05689584,
        "fxTimeStamp": null
    },
    "fxTradeUsage": null,
    "fxQuoteUsage": {
        "paymentAmountAvailable": 1896515.00,
        "sourceAmountAvailable": 2004418.81,
        "linkedTradeIds": [
            "272430"
        ]
    }
}

In case of trade details, the request would look like: POST /v2/exchangeRates/quotes/status

{
  "idType": "TRADEID",
  "idValue": "272430"
}

Returns this response:

{
    "quoteId": "Q7589",
    "tradeId": "272430",
    "status": "TRADED",
    "relatedEntityId": null,
    "expirationTime": null,
    "liquidityTiming": {
        "settlementDate": "2023-02-28",
        "tenor": null
    },
    "fxTrade": {
        "paymentAmount": 100.00,
        "paymentCurrency": "EUR",
        "sourceCurrency": "USD",
        "sourceAmount": 105.69,
        "fxRate": 1.05689584,
        "fxTimeStamp": null
    },
    "fxTradeUsage": {
        "paymentAmountAvailable": 100.00,
        "sourceAmountAvailable": 105.69,
        "linkedPaymentEndToEndIds": []
    },
    "fxQuoteUsage": null
}

Step 4 - Use your currency

You have two business days to use your newly purchased currency to make a payment. You can use the entire amount in one payment or divide it across multiple payments. Any currency that is unused after two days will be unwound. An unwind may create a financial loss if rates have changed in an unfavorable direction.

To make a payment, include the tradeId in your request. Your payment amount should not exceed the total trade amount.

POST /v2/payments/payouts and include your tradeId in the payouts object.

{
    "paymentRequestId": "US_0045724",
    "requestLevel": {
        "fundingSource": {
            "fundingAccount": {
                "accountInfo": {
                    "accountHolderName": "Client11",
                    "accountIdentifier": {
                        "accountNumber": "290000069300"
                    },
                    "bankIdentifier": {
                        "bic": "GSCRUS30XXX"
                    }
                }
            },
            "fundingCurrency": "USD"
        },
        "routingPreferences": {
            "paymentTypePreference": "WIRE"
        }
    },
    "payouts": [
        {
            "paymentEndToEndId": "EUR_0314734",
            "corePayoutInfo": {
                "requestedPaymentDate": "2023-02-24",
                "paymentCurrency": "EUR",
                "amount": 100.00,
                "payeeAccount": {
                    "accountInfo": {
                        "accountHolderName": "Creditor Acc",
                        "accountIdentifier": {
                            "iban": "GB46BUKB20041538290008"
                        },
                        "bankIdentifier": {
                            "bic": "BUKBGB22"
                        },
                        "address": {
                            "addressLines": [
                                "15",
                                "Broad Avenue"
                            ],
                            "city": "Amsterdam",
                            "countryISOCode": "NL",
                            "postalCode": "1011 AA"
                        }
                    }
                },
                "messagesFromOriginator": {
                    "paymentPurpose": "WIRE TEST-EUR",
                    "remittanceInfo": {
                        "unstructuredRemittance": [
                            "WIRE TEST-EUR"
                        ]
                    }
                }
            },
            "routingSpecificPayoutInfo": {
                "wirePayoutLevel": {
                    "chargeBearer": "SLEV"
                }
            },
            "otherPayoutInfo": {
                "fxPayoutLevel": {
                    "amountType": "PAYMENT",
                    "tradeId": "272430"
                }
            }
        }
    ]
}

For a successful payment request, you will get the response:

{
    "paymentRequestId": "US_0045724",
    "collectionRequestId": null,
    "requestStatus": "ACCEPTED",
    "message": null
}

Once you’ve initiated a payment, review the status of your trade again to see how much currency you have left to use. Use POST /v2/exchangeRates/quotes/status as mentioned in Step 3 above to get the Trade details.

Step 5 - Troubleshoot your issues

While using our FX APIs, you may encounter exceptions and it is important that you build a workflow to manage those.

Exception ScenarioComments
Quote expiredYour QuoteId has expired. Please request a new quote using /v2/exchangeRates/quotes.
Invalid quote IDYour Quote ID is invalid. Please check your quote ID and resubmit.
Invalid trade IDYour Trade ID is invalid. Please check your Trade ID and resubmit.
Invalid request parameters on any of the following
  1. Request a new quote API (POST /v2/exchangeRates/quotes)
  2. Trade on a quote API (POST /v2/exchangeRatesQuote/quotes/accept)
  3. Trade requested by a different client than what is marked on quote
  4. Idempotency key already exist for a different trade for this client
  5. Source amount passed for Held Rates
Invalid request parameters on any of the following
  1. Ensure either sourceAmount or paymentAmount is present in the request.
  2. Quote ID is invalid for the requesting party.
  3. Trades cannot be used by a client different from who requested the quote.
  4. Trade Request ID already exists, please resubmit the payment with a unique Trade Request Id.
  5. sourceAmount is not supported. Please resubmit your request with paymentAmount.
Invalid currency – Request a new quote APIThis currency is not offered for Held Rates. Please resubmit using a valid currency.
Quote/Trade quantity exceeds max control notional limitThe quote/trade quantity exceeds the maximum limit. Please resubmit using a valid limit or contact your GS representative.
Client markup not availableClient markup not available Request could not be completed. Please contact your GS representative.
Liquidity sources unavailable when using
  1. Request a new quote API
  2. Trade on a quote API
  • For Quote Request:
    • Weekend: FX rate is currently unavailable. Please resubmit your request during market open hours.
    • o Non-weekend: FX rate is currently unavailable. Please contact your GS representative.
  • For Trade Request
    • Weekend: Please resubmit your request during market open hours
    • Non-Weekend: Request could not be completed. Please reach out to your GS representative.
Trade on a quote is rejectedYour request could not be completed. Please reach out to your GS representative.
Request failed for unknown reasonsTechnical Error. Please raise an internal alert and contact your GS representative.
Quote request not completed in timeTechnical Error. Please resubmit your request.
Trade request exceeds the notional remaining for that quoteYour trade quantity requested exceeds the available quote limit. Please resubmit with a valid quantity.
Client preferences not set
  1. Allow weekend
  2. Max held rate notional
If you do not define a max held rate notional, default limits will take effect.If this error persists, please contact your GS representative.

GS DAP® is owned and operated by Goldman Sachs. This site is for informational purposes only and does not constitute an offer to provide, or the solicitation of an offer to provide access to or use of GS DAP®. Any subsequent commitment by Goldman Sachs to provide access to and / or use of GS DAP® would be subject to various conditions, including, amongst others, (i) satisfactory determination and legal review of the structure of any potential product or activity, (ii) receipt of all internal and external approvals (including potentially regulatory approvals); (iii) execution of any relevant documentation in a form satisfactory to Goldman Sachs; and (iv) completion of any relevant system / technology / platform build or adaptation required or desired to support the structure of any potential product or activity. All GS DAP® features may not be available in certain jurisdictions. Not all features of GS DAP® will apply to all use cases. Use of terms (e.g., "account") on GS DAP® are for convenience only and does not imply any regulatory or legal status by such term.
¹ Real-time data can be impacted by planned system maintenance, connectivity or availability issues stemming from related third-party service providers, or other intermittent or unplanned technology issues.
Transaction Banking services are offered by Goldman Sachs Bank USA (“GS Bank”) and its affiliates. GS Bank is a New York State chartered bank, a member of the Federal Reserve System and a Member FDIC. For additional information, please see Bank Regulatory Information.
Certain solutions and Institutional Services described herein are provided via our Marquee platform. The Marquee platform is for institutional and professional clients only. This site is for informational purposes only and does not constitute an offer to provide the Marquee platform services described, nor an offer to sell, or the solicitation of an offer to buy, any security. Some of the services and products described herein may not be available in certain jurisdictions or to certain types of clients. Please contact your Goldman Sachs sales representative with any questions. Any data or market information presented on the site is solely for illustrative purposes. There is no representation that any transaction can or could have been effected on such terms or at such prices. Please see https://www.goldmansachs.com/disclaimer/sec-div-disclaimers-for-electronic-comms.html for additional information.
Mosaic is a service mark of Goldman Sachs & Co. LLC. This service is made available in the United States by Goldman Sachs & Co. LLC and outside of the United States by Goldman Sachs International, or its local affiliates in accordance with applicable law and regulations. Goldman Sachs International and Goldman Sachs & Co. LLC are the distributors of the Goldman Sachs Funds. Depending upon the jurisdiction in which you are located, transactions in non-Goldman Sachs money market funds are affected by either Goldman Sachs & Co. LLC, a member of FINRA, SIPC and NYSE, or Goldman Sachs International. For additional information contact your Goldman Sachs representative. Goldman Sachs & Co. LLC, Goldman Sachs International, Goldman Sachs Liquidity Solutions, Goldman Sachs Asset Management, L.P., and the Goldman Sachs funds available through Goldman Sachs Liquidity Solutions and other affiliated entities, are under the common control of the Goldman Sachs Group, Inc.
© 2025 Goldman Sachs. All rights reserved.