Submit Payment Order

The Payment Order API simplifies the payment workflow by allowing clients to book an FX trade and submit payment instructions in a single API request.

Traditionally, clients would need to:

  • Request a quote
  • Book the trade
  • Provide payment instructions using a separate API call

The Payment Order API combines these steps into a single operation, reducing integration complexity and enabling faster straight-through processing.

Upon successful submission, StoneX validates the payment details, books the trade, and creates the associated payment instruction. The response includes the StoneX fxid together with trade details such as rate, value date, and currency amounts.

Benefits:

  • Reduced Integration Complexity: Execute trade booking and payment instruction submission through a single endpoint, eliminating the need for multiple API calls.
  • Real-Time Validation: Payment instructions are validated against StoneX currency rules before the payment is accepted, helping reduce repair rates and rejected payments
  • Faster Time to Market: Build a complete payment workflow with fewer API calls and less orchestration logic.
  • End-to-End Traceability: Every successful request returns a unique StoneX FXID which can subsequently be used for tracking, webhooks, investigations, cancellations and reporting.

Typical Use-Cases:

  • Supplier payments
  • Accounts payable automation
  • Treasury and ERP integrations
  • Marketplace payouts
  • FinTech payment orchestration
  • High-volume cross-border payment workflows

Request Body:

This API allows clients to either skip the Quote/Trade APIs or get a Quote ID and then skip the Trade booking call.

  • In order to use this with a quoteId, you will need to call the Get a Quote API first and then you can call this API with a valid quoteId, amount, currencies and payment instructions.
  • To use this without a quoteId , you can just provide the amount and currencies along with payment instructions and we will do the rest in the background.

Example Request:

{
    "quoteId": "d39c5848-fd52-4180-89ee-97ffe9456048",
    "sellAmount": 50,
    "clientBuyCurrency": "KES",
    "clientSellCurrency": "GBP",
    "clientReference": "Invoice-12345",
 
    
    "debtor": {
        "name": "ABC Pvt Limited",
        "address": {
            "buildingNo": "123",
            "buildingName": "ABC",
            "floor": "1st Floor",
            "street": "Street1",
            "city": "London",
            "district": "string",
            "postalCode": "string",
            "state": "London",
            "countryCode": "GB"
        },
        "identification": "23459876"
    },

    "creditor": {
        "name": "Steve Smith",
        "address": {
            "street": "Vivtoria Road",
            "city": "Nairobi",
            "district": "RJ",
            "postalCode": "22450",
            "countryCode": "KE"
        },
        "CountryofResidence": "KE"
    },
    "creditorAccountNumber": "12345678",
    "creditorAccountName": "Steve Smith",
    "creditorCountryCode": "KE",
    "creditorAgent": {
        "routingCode": "KCOOKENAXXX"
    },

    "purposeOfPayment": {
        "unstructedInfo": "Invoice Payment",
                "structuredInfo":[
           "BUSB" 
        ]
    }
}

Response

One you submit the request, this API will validate the payment instruction, get a quote, book the trade and link the payment. The following fields are returned in the response.

Field NameTypeDescription
createdDateDateTimeDate & time when instruction was created
tradeResponseObjectObject containing the details of the payment
> isSuccessbooleantrue or false (true - instruction was accepted & linked to trade)
> buyAmountnumberAmount you're buying
> sellAmountnumberAmount you're selling
> buyCurrencyStringCurrency you're buying (Ex- INR, KES)
> sellCurrencyStringCurrency you're selling (Ex- USD, GBP)
> tradeStatusStringStatus of the trade
> ratenumberRate for the trade
> tradeDateDate (yyyy-mm-dd)Date trade was executed
> quoteIdStringUnique quote ID used by StoneX to book the trade
> fxIdStringUnique FX ID used by StoneX to book the trade
> feenumberAny fee charge for the payment (always in sell currency)
valueDateDate (yyyy-mm-dd)Value Date of the payment
{
    "createdDate": "2026-07-31T00:00:00Z",
    "tradeResponse": {
        "isSuccess": true,
        "buyAmount": 8600.01,
        "sellAmount": 50,
        "buyCurrency": "KES",
        "sellCurrency": "GBP",
        "tradeStatus": "EXECUTED",
        "rate": 172.0002,
        "tradeDate": "2026-07-31",
        "quoteId": "d39c5848-fd52-4180-89ee-97ffe9456048",
        "fxId": 8788301,
        "fee": 0
    },
    "valueDate": "2026-08-04"
}

Body Params
string | null
string | null
double | null
double | null
string | null
string | null
double | null
date | null
boolean | null
string | null
string | null
string | null
string | null
string | null
string | null
string | null
purposeOfPayment
object
intermediaryAgents
array of objects | null
intermediaryAgents
creditor
object
ultimateCreditor
object
creditorAgent
object
debtor
object
ultimateDebtor
object
orderingInstitution
object
instructingAgent
object
initiatingParty
object
Headers
string

Client ID for API identification

string
enum
Defaults to application/json;odata.metadata=minimal;odata.streaming=true

Generated from available response content types

string
enum
Defaults to application/json;odata.metadata=minimal;odata.streaming=true

Generated from available request content types

Responses

500

Internal Server Error

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json;odata.metadata=minimal;odata.streaming=true
application/json;odata.metadata=minimal;odata.streaming=false
application/json;odata.metadata=minimal
application/json;odata.metadata=full;odata.streaming=true
application/json;odata.metadata=full;odata.streaming=false
application/json;odata.metadata=full
application/json;odata.metadata=none;odata.streaming=true
application/json;odata.metadata=none;odata.streaming=false
application/json;odata.metadata=none
application/json;odata.streaming=true
application/json;odata.streaming=false
application/json
application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false
application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=true
application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=false
application/json;odata.metadata=minimal;odata.streaming=false;IEEE754Compatible=true
application/json;odata.metadata=minimal;IEEE754Compatible=false
application/json;odata.metadata=minimal;IEEE754Compatible=true
application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=false
application/json;odata.metadata=full;odata.streaming=true;IEEE754Compatible=true
application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=false
application/json;odata.metadata=full;odata.streaming=false;IEEE754Compatible=true
application/json;odata.metadata=full;IEEE754Compatible=false
application/json;odata.metadata=full;IEEE754Compatible=true
application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=false
application/json;odata.metadata=none;odata.streaming=true;IEEE754Compatible=true
application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=true
application/json;odata.metadata=none;odata.streaming=false;IEEE754Compatible=false
application/json;odata.metadata=none;IEEE754Compatible=false
application/json;odata.metadata=none;IEEE754Compatible=true
application/json;odata.streaming=true;IEEE754Compatible=false
application/json;odata.streaming=true;IEEE754Compatible=true
application/json;odata.streaming=false;IEEE754Compatible=false
application/json;odata.streaming=false;IEEE754Compatible=true
application/json;IEEE754Compatible=false
application/json;IEEE754Compatible=true
text/plain
application/octet-stream
text/json