Check FX settlement status

POST: /asmin/api/v1/business/fund/inquiryExchange Signature required

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:

  • Maximum length: 128 characters

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:

  • For more details, refer to the Result processing logic chapter.

exchangeId

String

Yes

The unique ID that is assigned by WorldFirst to identify a settlement

More information:

  • Maximum length: 64 characters

exchangeRequestId

String

Yes

The unique ID that is assigned by the settlement initiator to identify a settlement request.

More information:

  • Maximum length: 128 characters

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:

  • The value of this field follows the ISO 8601 standard format. For example, 2019-01-01T01:01:01+08:00, or 2019-01-01T01:01:01Z(UTC timezone).

exchangeFinishTime

Datetime object

Yes

The time that the settlement request is finished(either succeed or failed).

Notes:

  • The value of this field follows the ISO 8601 standard format. For example, 2019-01-01T01:01:01+08:00, or 2019-01-01T01:01:01Z(UTC timezone).

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:

  • REALTIME: Real-time settlement.
  • APPOINTED: Appointed settlement.

For the full list, refer to the exchangeMode.

exchangeTradeType

String

Yes

Defines the type of settlement.

Possible values are:

  • SPOT: Using spot rate.
  • FORWARD: Using forward rate.

For the full list, refer to the exchangeTradeType.

exchangeForwardInfo

ExchangeForwardInfo object

No

Information about the forward exchange.

Note:

This field is required when the exchangeTradeType field is FORWARD.

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 exchangeResult.resultCode.

F

This indicates the API call failed. For more information on why the call failed, see result.resultCode.

U

This indicates the API call result is unknown. Partner can make a query when the returned status is UNKNOWN. Use the following query strategy:

  • A Partner can make 7 queries at maximum.
  • Intervals between queries: 5m, 10m, 20m, 40m, 80m, 160m, and 320m.

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 POST.

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

copy
{
    "exchangeRequestId": "*****"
}

Request calling samples

copy
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);
copy
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)
copy
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);
copy
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

copy
{
    "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
    }
}

@2024 WorldFirst