Check FX settlement status
POST
: /asmin/api/v1/business/fund/inquiryExchange
After creating a settlement request with the createExchange API, the Partner can inquire about the result of the settlement request with this API.
Structure
A message consists of a header and body. The following sections are focused on the body structure. For the header structure, see:
Request parameters
Field | Data type | Required | Description |
exchangeRequestId | String | Yes | The unique ID that is assigned by the Partner to identify a settlement request. More information:
|
Response parameters
Field | Data type | Required | Description |
result | Result object | Yes | Indicates whether this API is called successfully. |
exchangeResult | Result object | Yes | Indicates the result of the settlement. Note:
|
exchangeId | String | Yes | The unique ID that is assigned by WorldFirst to identify a settlement More information:
|
exchangeRequestId | String | Yes | The unique ID that is assigned by the settlement initiator to identify a settlement request. More information:
|
sell | QuoteAmount object | Yes | The amount and the currency to be sold. |
buy | QuoteAmount object | Yes | The amount and the currency to be bought. |
exchangeCreateTime | Datetime object | Yes | The time that the settlement request is created. Notes:
|
exchangeFinishTime | Datetime object | Yes | The time that the settlement request is finished(either succeed or failed). Notes:
|
quote | Quote object | Yes | Information with regard to the quote, such as the currency pair used, the expiry time of the quote, etc. |
exchangeMode | String | Yes | The mode of the settlement. Possible values are:
For the full list, refer to the exchangeMode. |
exchangeTradeType | String | Yes | Defines the type of settlement. Possible values are:
For the full list, refer to the exchangeTradeType. |
exchangeForwardInfo | ExchangeForwardInfo object | No | Information about the forward exchange. Note: This field is required when the |
Result processing logic
After calling the API, a response is returned, which includes two result codes: result.resultStatus
and exchangeResult.resultStatus
.
result.resultStatus
indicates the result of the inquiry.exchangeResult.resultStatus
indicates the result of the settlement.
Possible responses for result.resultStatus
are:
Result status | Description |
S | This indicates the API call succeeded. For the result of the settlement, check |
F | This indicates the API call failed. For more information on why the call failed, see |
U | This indicates the API call result is unknown. Partner can make a query when the returned status is
If none of the queries is successful, contact our Technical Support Team. |
Result codes
result.resultCode
System-related result codes
resultCode | resultStatus | resultMessage | Further action |
SUCCESS | S | Success | |
PARAM_ILLEGAL | F | Illegal parameters exist. For example, a non-numeric input, or an invalid date. | Check and verify whether the request fields, including the header fields and body fields, are correct and valid. For details on the fields of each API, see the specific API Structure section. |
UNKNOWN_EXCEPTION | U | API failed due to unknown reason. | The service might be down, retry later. If the issue persists, contact our Technical Support Team. |
REQUEST_TRAFFIC_EXCEED_LIMIT | U | The request traffic exceeds the limit. | Call the interface again to resolve the issue. If the issue persists, contact our Technical Support Team. |
INVALID_API | F | The called API is invalid or not active. | Check whether the correct API is being called. |
INVALID_CLIENT | F | The client is invalid. | The Client ID does not exist or is invalid. |
INVALID_SIGNATURE | F | The signature is invalid. | Make sure the request is properly signed with a valid signature. |
METHOD_NOT_SUPPORTED | F | The server does not implement the requested HTTP method. | Ensure the HTTP method is |
Business-related result codes
resultCode | resultStatus | resultMessage | Further action |
ORDER_NOT_EXIST | F | The order does not exist. | Retry with another exchange order. |
INVALID_ACCESS_TOKEN | F | Invalid access token | Check whether the accessToken is correct. |
CONTRACT_CHECK_FAIL | F | The contract check has failed. | Check the contract status before retrying. |
exchangeResult.resultCode
resultCode | resultStatus | resultMessage | Further action |
SUCCESS | S | The settlement is successfully completed. | |
PROCESS_FAIL | F | A general business failure occurred. Do not retry. | Human intervention is usually needed. It is recommended that you contact our Technical Support Team to resolve the issue. |
PROCESSING | S | The settlement is being processed. | The settlement request is created successfully. Call the inquiryExchange API again or wait for the result notification from the notifyExchange API. |
UNKNOWN_EXCEPTION | U | API failed due to an unknown reason. | The service might be down, retry later. If the issue persists, contact our Technical Support Team. |
Samples
Request
Request body sample
{
"exchangeRequestId": "*****"
}
Request calling samples
var jsonStr="{\"exchangeRequestId\":\"*****\"}";
var client = new RestClient("http://{domain_name}.com/amsin/api/v1/business/fund/inquiryExchange");
var request = new RestRequest(Method.POST);
request.AddHeader("client-id","*****");
request.AddHeader("request-time","2022-05-17T11:19:20+08:00");
request.AddHeader("Content-Type","application/json");
request.AddHeader("signature","algorithm=RSA256,keyVersion=1,signature=RckSOIrxy%2FKqC%2FZQOO0t74U9U4TFVYKmW%2FZflFRut7W1hipos3NLBGdpzbulcc5Q7XwZP1t3qgTZMFrC%2FlzOQCOsBhUgelvEAuACu49PEGiAus8sU%2FFJa1HOIUmst3oWjLT%2BDqY083mR7jVwc5O2JYP08wNCLu55PFZtXHBUfwEAYoZInhgRoLtQTr%2F7Bphd7L9cS3xD3tluxbgkcaFr7NQVrfWJuQKp%2BFrabo6xZr%2FRHZRd%2FijALuUYYjXH92n4VFwSXSO%2B%2BUBVPoGyWWz1q3QJ2tHNVU7wpc3wtCwwB76pNfGTbJit%2BdylGU8O5UkW3TwSkNnpzepRABM8bBQpgQ%*****");
request.AddParameter("application/json; charset=utf-8", jsonStr, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
url = "http://{domain_name}.com/amsin/api/v1/business/account/inquiryExchange"
headers = {
"client-id": "*****",
"request-time": "2022-05-17T11:19:20+08:00",
"Content-Type": "application/json",
"signature": "algorithm=RSA256,keyVersion=1,signature=RckSOIrxy%2FKqC%2FZQOO0t74U9U4TFVYKmW%2FZflFRut7W1hipos3NLBGdpzbulcc5Q7XwZP1t3qgTZMFrC%2FlzOQCOsBhUgelvEAuACu49PEGiAus8sU%2FFJa1HOIUmst3oWjLT%2BDqY083mR7jVwc5O2JYP08wNCLu55PFZtXHBUfwEAYoZInhgRoLtQTr%2F7Bphd7L9cS3xD3tluxbgkcaFr7NQVrfWJuQKp%2BFrabo6xZr%2FRHZRd%2FijALuUYYjXH92n4VFwSXSO%2B%2BUBVPoGyWWz1q3QJ2tHNVU7wpc3wtCwwB76pNfGTbJit%2BdylGU8O5UkW3TwSkNnpzepRABM8bBQpgQ%*****"
}
datas ={"exchangeRequestId":"*****"}
res = requests.post(url=url, data=json.dumps(datas), headers=headers)
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost("http://{domain_name}.com/amsin/api/v1/business/fund/inquiryExchange");
httpPost.addHeader("client-id", "*****");
httpPost.addHeader("request-time", "2022-05-17T11:19:20+08:00");
httpPost.addHeader("signature","algorithm=RSA256,keyVersion=1,signature=RckSOIrxy%2FKqC%2FZQOO0t74U9U4TFVYKmW%2FZflFRut7W1hipos3NLBGdpzbulcc5Q7XwZP1t3qgTZMFrC%2FlzOQCOsBhUgelvEAuACu49PEGiAus8sU%2FFJa1HOIUmst3oWjLT%2BDqY083mR7jVwc5O2JYP08wNCLu55PFZtXHBUfwEAYoZInhgRoLtQTr%2F7Bphd7L9cS3xD3tluxbgkcaFr7NQVrfWJuQKp%2BFrabo6xZr%2FRHZRd%2FijALuUYYjXH92n4VFwSXSO%2B%2BUBVPoGyWWz1q3QJ2tHNVU7wpc3wtCwwB76pNfGTbJit%2BdylGU8O5UkW3TwSkNnpzepRABM8bBQpgQ%*****" );
httpPost.addHeader("Content-Type","application/json");
StringEntity entity = new StringEntity("{\"exchangeRequestId\":\"*****\"}");
httpPost.setEntity(entity);
CloseableHttpResponse response = client.execute(httpPost);
var jsonStr="{\"exchangeRequestId\":\"*****\"}";
var client = "http://{domain_name}.com/amsin/api/v1/business/fund/inquiryExchange";
var xhr = new XMLHttpRequest;
xhr.open("POST",client,true);
xhr.setRequestHeader("client-id","*****");
xhr.setRequestHeader("request-time","2022-05-17T11:19:20+08:00");
xhr.setRequestHeader("Content-Type","application/json");
xhr.setRequestHeader("signature","algorithm=RSA256,keyVersion=1,signature=RckSOIrxy%2FKqC%2FZQOO0t74U9U4TFVYKmW%2FZflFRut7W1hipos3NLBGdpzbulcc5Q7XwZP1t3qgTZMFrC%2FlzOQCOsBhUgelvEAuACu49PEGiAus8sU%2FFJa1HOIUmst3oWjLT%2BDqY083mR7jVwc5O2JYP08wNCLu55PFZtXHBUfwEAYoZInhgRoLtQTr%2F7Bphd7L9cS3xD3tluxbgkcaFr7NQVrfWJuQKp%2BFrabo6xZr%2FRHZRd%2FijALuUYYjXH92n4VFwSXSO%2B%2BUBVPoGyWWz1q3QJ2tHNVU7wpc3wtCwwB76pNfGTbJit%2BdylGU8O5UkW3TwSkNnpzepRABM8bBQpgQ%*****");
xhr.send(jsonStr);
Response
Response body sample
{
"buy": {
"currency": "USD",
"value": 231
},
"exchangeCreateTime": "2022-05-16T08:55:09Z",
"exchangeFinishTime": "2022-05-16T08:55:16Z",
"exchangeId": "*****",
"exchangeMode": "APPOINTED",
"exchangeRequestId": "*****",
"exchangeResult": {
"resultCode": "SUCCESS",
"resultMessage": "success.",
"resultStatus": "S"
},
"exchangeTradeType": "SPOT",
"quote": {
"quoteCurrencyPair": "EUR/USD",
"quoteExpiryTime": "2022-05-16T09:08:51Z",
"quoteId": "*****",
"quotePrice": "1.07461952",
"quoteStartTime": "2022-05-16T08:53:51Z"
},
"result": {
"resultCode": "SUCCESS",
"resultMessage": "success.",
"resultStatus": "S"
},
"sell": {
"currency": "EUR",
"value": 215
}
}