The Bulk Quote API lets you request multiple FX quotes in one call. By providing an array of currency pairs in the requests, you can obtain a list of separate quotes for each currency pair with it's own expiry time and value date.
Request
Provide an array of quote requests under the quoteRequests property. Each individual quote request mirrors the single Get a Quote API payload.
Request Body:
Each individual quote request can have the following fields:
- Required Fields:
sellCurrency: The ISO currency code of the currency you are selling.buyCurrency: The ISO currency code of the currency you are buying.
- Conditional Fields: If you are a tiered pricing client, you will need to provide either
buyAmountorsellAmountwhen requesting quotes. If you have been priced with a flat margin or guaranteed margin, you can request quotes withoutsellAmountorbuyAmountsellAmount: The amount of the sell currency you are trading.buyAmount: The amount of the buy currency you want to receive.
- Optional Fields:
clientMargin: This is an optional field where you can specify margin (in percentage terms) that you want StoneX to add to the rate before returning the Quote. This can be used if you have front-end applications which want to add margins on top of your agreed base margin with StoneX. For ex - If you'd like to add 1% additional margin to the rate StoneX provides you, you can pass 1 in this field and we will adjust the rate to add 1% additional margin.valueDate: We support multiple value date types such as spot (T+2), earliest (T+0 or T+1 depending on currency), requested date (specific date you want to pay) etc. If you are set up for REQUESTED value date type, you will need to provide the value date you want in YYYY-MM-DD format. Contact us if you would like to change your default value date type which is always spot dates by default.clientReference: Your external identifier to track each item.
{
"quoteRequests": [
{
"sellCurrency": "GBP",
"buyCurrency": "EUR"
},
{
"sellCurrency": "GBP",
"buyCurrency": "USD"
}
]
}
{
"quoteRequests": [
{
"sellCurrency": "GBP",
"buyCurrency": "EUR",
"sellAmount": 500
},
{
"sellCurrency": "GBP",
"buyCurrency": "USD",
"buyAmount": 1000
},
{
"sellCurrency": "USD",
"buyCurrency": "BRL",
"sellAmount": 1000
},
{
"sellCurrency": "USD",
"buyCurrency": "JPY",
"sellAmount": 1500
}
]
}
Response
The API returns an array aligned to your input items, with per‑item outcomes. Successful items include a quoteId and pricing fields (rate, fee, expiry time, value date etc.) whereas failed items include structured errors without quoteId.
Response Fields:
quoteId: A unique identifier for the quote.sellCurrency: The currency being sold.buyCurrency: The currency being bought.sellAmount: The amount of the sell currency.buyAmount: The amount of the buy currency.rate: The exchange rate for the trade.fee: Any applicable fee for the trade.createdTime: The timestamp when the quote was created.quoteExpiry: The time until the quote is valid.valueDate: The date when the payment will be settled.
Scenario 1: All quotes are priced successfully
{
"successes": [
{
"quoteRequest": {
"sellCurrency": "GBP",
"buyCurrency": "EUR",
"sellAmount": null,
"buyAmount": null,
"clientReference": null,
"rateValidUntil": null,
"clientMargin": null,
"valueDate": null,
"additionalInformation": null
},
"quoteResponse": {
"quoteId": "efddb776-871f-4725-b26f-4fdc0753b163",
"sellCurrency": "GBP",
"buyCurrency": "EUR",
"sellAmount": null,
"buyAmount": null,
"rate": 0.879,
"fee": 0,
"createdTime": "2025-11-28T11:24:34.4083808Z",
"quoteExpiry": "2025-11-28T16:40:00Z",
"valueDate": "2025-12-01"
}
},
{
"quoteRequest": {
"sellCurrency": "GBP",
"buyCurrency": "USD",
"sellAmount": null,
"buyAmount": null,
"clientReference": null,
"rateValidUntil": null,
"clientMargin": null,
"valueDate": null,
"additionalInformation": null
},
"quoteResponse": {
"quoteId": "94e20bca-a2d2-4bfd-a941-4e0b77eea833",
"sellCurrency": "GBP",
"buyCurrency": "USD",
"sellAmount": null,
"buyAmount": null,
"rate": 1.3137,
"fee": 0,
"createdTime": "2025-11-28T11:24:34.4678959Z",
"quoteExpiry": "2025-11-28T16:40:00Z",
"valueDate": "2025-12-01"
}
}
],
"failures": []
}
Scenario 2: Some quotes are priced successfully while others have errors
{
"successes": [
{
"quoteRequest": {
"sellCurrency": "GBP",
"buyCurrency": "EUR",
"sellAmount": 500,
"buyAmount": null,
"clientReference": null,
"rateValidUntil": null,
"clientMargin": null,
"valueDate": null,
"additionalInformation": null
},
"quoteResponse": {
"quoteId": "1f8e176a-e5a4-4c5c-9e67-d084d1023404",
"sellCurrency": "GBP",
"buyCurrency": "EUR",
"sellAmount": 500,
"buyAmount": 568.8,
"rate": 0.879,
"fee": 0,
"createdTime": "2025-11-28T11:18:54.845634Z",
"quoteExpiry": "2025-11-28T16:40:00Z",
"valueDate": "2025-12-01"
}
},
{
"quoteRequest": {
"sellCurrency": "GBP",
"buyCurrency": "USD",
"sellAmount": null,
"buyAmount": 1000,
"clientReference": null,
"rateValidUntil": null,
"clientMargin": null,
"valueDate": null,
"additionalInformation": null
},
"quoteResponse": {
"quoteId": "1d3fcca8-057f-443e-b458-3eb5f625af3b",
"sellCurrency": "GBP",
"buyCurrency": "USD",
"sellAmount": 761.21,
"buyAmount": 1000,
"rate": 1.3137,
"fee": 0,
"createdTime": "2025-11-28T11:18:54.877872Z",
"quoteExpiry": "2025-11-28T16:40:00Z",
"valueDate": "2025-12-01"
}
},
{
"quoteRequest": {
"sellCurrency": "USD",
"buyCurrency": "JPY",
"sellAmount": 1500,
"buyAmount": null,
"clientReference": null,
"rateValidUntil": null,
"clientMargin": null,
"valueDate": null,
"additionalInformation": null
},
"quoteResponse": {
"quoteId": "2c3ad05f-fca4-4d44-8466-16a737258f45",
"sellCurrency": "USD",
"buyCurrency": "JPY",
"sellAmount": 1500,
"buyAmount": 233248,
"rate": 155.4986,
"fee": 0,
"createdTime": "2025-11-28T11:18:54.8205476Z",
"quoteExpiry": "2025-11-28T16:40:00Z",
"valueDate": "2025-12-02"
}
}
],
"failures": [
{
"quoteRequest": {
"sellCurrency": "USD",
"buyCurrency": "BRL",
"sellAmount": 1000,
"buyAmount": null,
"clientReference": null,
"rateValidUntil": null,
"clientMargin": null,
"valueDate": null,
"additionalInformation": null
},
"failure": {
"traceId": "00-9caeca3a236c87685797d34a368f3854-e401be6487f6a70d-01",
"instance": "0HNHDK1QS6RJ7:00000038",
"title": "Bad Input",
"errors": [
{
"errorMessage": "Buy currency BRL not configured",
"errorCode": "TRD00005"
}
]
}
}
]
}
Workflow and next steps
- Prepare Request: Add all the currency pairs and respective amounts in your bulk quote request
- Request quotes: Call Bulk Quote API to price your batch of payments.
- Book trades: For each item you wish to execute, call Book a Trade with the returned
quoteIdfor each currency pair. - Provide payment instructions: After booking, submit delivery instructions via Instruct API using the returned
fxId. - Track status: Use Get Status API and (optionally) webhooks for real‑time updates.
