POST
/v2/cross-border/previewPreview - Send Cross Border Payment
Previews a cross-border payment. Submit payment instrument ID, purpose, description, destination amount/currency, and related fields. On success, returns fees, FX details, and a QuoteID for the submit step.
Optional header `x-idempotency-key` is accepted (same as Submit Cross Border Payment).
Headers
| Field | Type | Required | Possible values | Description |
|---|---|---|---|---|
Authorization | string | Required | Bearer {SessionToken} | Session token from Get Session Token, sent as `Authorization: Bearer {SessionToken}`. Replace with the value from the `x-refresh-token` response header when present (typically within 2 minutes of expiry). Secured calls must use the same IP as the auth request. |
x-idempotency-key | string | Optional | 7b2c8f1a-4e3d-4a1b-9c0e-123456789abc | Optional client-supplied idempotency key (max 255 characters). When provided, it is stored on the payment and must be unique. Reusing the same key on payment create does not create a second payment: the request short-circuits before SupportingDocument validation and returns HTTP 200 with only `ResponseData.TransactionNumber` of the original payment. Use a new key for each distinct payment; reuse the same key only when retrying the same logical request. |
Request body
| Field | Type | Required | Possible values | Description |
|---|---|---|---|---|
BeneficiaryPaymentInstrumentID | string | Required | {paymentInstrumentID} | Payment instrument ID linked to the beneficiary (from List or Create Payment Instrument). |
Purpose | string | Required | Asset_Purchase | Contract_Payment | Other | Education_Payment | Payroll | dividends | Mortgage_Payments | Materials_Purchase | Loan_Payments | Professional_Service_Payments | Invoice_Payment | Investment_Purchase | Savings | Rent_Utility_Payments | reimbursements | Tax_Payments | Personal_Family_Payment | settlement_trade | treasury_movement | gift_donation | remittance | Regulatory purpose code for the payment. Must be one of the allowed values. |
Description | string | Required | Test API Payment | Short memo or narrative for the transaction (shown in history and details). |
DestinationAmount | string | Required | 150 | Amount the beneficiary receives, in destination currency, as a decimal string. |
DestinationCurrency | string | Required | EUR | Currency the beneficiary receives (e.g. EUR, USD, GBP, ARS). |
CryptoBuySellActivity | string | Required | Yes | No | Whether the transaction involves buying or selling cryptocurrency: `Yes` or `No`. |
SupportingDocument | string | Required | {fileID} | File ID from Upload File (`customField`: Payment_Invoice) for invoice or supporting documentation. |
DocumentReferenceNumber | string | Required | 13214654987 | Reference number for the supporting document (e.g. passport or driver license number). |
Example request
{
"BeneficiaryPaymentInstrumentID": "{paymentInstrumentID}",
"Purpose": "Savings",
"Description": "Testing Payment endpoint (Business Endpoint)",
"DestinationAmount": "12",
"DestinationCurrency": "EUR",
"CryptoBuySellActivity": "Yes",
"SupportingDocument": "{fileID}",
"DocumentReferenceNumber": "234234"
}Response
| Field | Type | Possible values | Description |
|---|---|---|---|
ResponseCode | integer | 200 | 201 | 204 | 400 | 401 | 403 | 404 | 410 | 422 | 500 | 301 | 503 | 422 | API result code in the response envelope. Indicates success or the error category (e.g. 200 success, 400 bad request, 401 unauthorized). |
ResponseMessage | string | Success | Created | NoContent | BadRequest | Unauthorized | Forbidden | NotFound | Gone | UnprocessableContent | ServerError | ResourceMoved | ServiceUnAvailable | UnProcessableEntity | Human-readable label paired with ResponseCode (e.g. Success, BadRequest, Unauthorized). Use with ResponseCode to interpret the outcome. |
ResponseData | object | Please refer to below example for response body | Transaction preview including FX, fees, source/destination amounts, and QuoteId. SEPA instruments also return SepaReachability, LastCheckedAt, and DataVersion. |
Example response
{
"ResponseCode": 200,
"ResponseMessage": "Success",
"ResponseData": {
"BeneficiaryPaymentInstrumentID": "{paymentInstrumentID}",
"From": "Example Business",
"To": "Earnest-TRF",
"DestinationAmount": "150",
"DestinationCurrency": "EUR",
"FXRate": "0.92",
"SourceAmount": "163.04",
"FeeInUSD": "40",
…Requires `Authorization: Bearer {SessionToken}` from Get Session Token. Refresh via `x-refresh-token` when supplied; use the same client IP as authentication.