POST
Payment result webhook
Use this webhook to receive server-side results for
TXN / SALE payment transactions and reconcile each notification through transactionId and paymentId.Signature coverage
Request signing guideAll payload fields are included in the signature except:
sign(legacy signature value)paymentMethodwalletTypeName
Webhook payload fields
notifyTypeNotification type, identifying the webhook business category.
Constraints
- Values
- Fixed to
TXNfor ordinary payment result notifications.
transactionIdOnerway transaction number generated for this transaction, used for tracking, queries, and idempotent processing.
Constraints
- Rule
- This value is a large-ID-style string. Preserve it as a string in JavaScript systems to avoid precision loss.
paymentIdPayment intent ID used to associate the same payment flow.
Constraints
- Consistency
- Do not confuse it with
transactionId;transactionIdidentifies a specific transaction, whilepaymentIdidentifies the payment intent.
txnTypeTransaction operation type represented by this notification.
Allowed values
SALE- Payment transaction.
Constraints
- Values
- Fixed to
SALEfor ordinary payment result notifications.
merchantNoMerchant number assigned by Onerway, identifying the merchant account receiving this notification.
merchantTxnIdMerchant-side transaction number, used for merchant reconciliation, deduplication, and original order association.
responseTimeTime when Onerway generated this notification result in
yyyy-MM-dd HH:mm:ss format.txnTimeTime when the transaction occurred or reached this transaction state in
yyyy-MM-dd HH:mm:ss format.txnTimeZoneTime zone offset used by
txnTime, in ±HH:mm format.orderAmountOriginal order amount, expressed in
orderCurrency.Constraints
- Rule
- Amount values are returned as decimal strings. Avoid binary floating-point arithmetic for money.
orderCurrencyOriginal order currency, as a three-letter ISO 4217 currency code.
statusCurrent transaction processing status.
Allowed values
S- Successful transaction.
F- Failed transaction.
N- Canceled transaction. The transaction was closed because it was not paid within its validity window — for example, the checkout session timed out.
Constraints
- Rule
Smeans the transaction succeeded,Fmeans it failed or was declined, andNmeans it was canceled. Use this field to determine the result of the currenttransactionId, together withpaymentStatusfor payment-intent state.
paymentStatusPayment-intent-level status used to read the lifecycle state of the payment intent under the same
paymentId.Allowed values
S- Payment intent succeeded.
O- Payment intent remains open and can be retried.
N- Payment intent is closed. It timed out without a successful payment — either no attempt was made or all attempts failed.
eciElectronic Commerce Indicator (ECI), indicating the 3DS authentication state related to the transaction.
cardBinCountryCard BIN country or region, as an ISO 3166-1 alpha-2 two-letter code.
reason{ respCode, respMsg }Transaction result reason object, carried as a JSON string in the notification.
signLegacy signature string kept for compatibility. It is computed with only the first enabled key and can mismatch your configured key during key rotation; verify notifications with the
X-Rh-Signature header instead.Constraints
- Rule
- Exclude
signitself from the canonical string when verifying this webhook.
paymentMethodPayment method or card brand used by this transaction.
metaDataMerchant-defined transaction metadata returned according to the request value.
walletTypeNameWallet type name.
Allowed values
GooglePay- Google Pay wallet.
ApplePay- Apple Pay wallet.
EXPR- Wallet funding source: bank card.
channelRequestIdPayment channel or processor request identifier, used for channel-side reconciliation or troubleshooting.
products{ name, price, ... }Order product list, carried as a JSON string in the notification.
paymentMethodDetails{ card }Payment method details object. Card transaction details are under the
card child object.{
"notifyType": "TXN",
"transactionId": "replace_with_transaction_id",
"paymentId": "replace_with_payment_id",
"txnType": "SALE",
"merchantNo": "replace_with_merchant_no",
"merchantTxnId": "replace_with_merchant_transaction_id",
"responseTime": "2026-06-25 13:52:23",
"txnTime": "2026-06-25 13:51:10",
"txnTimeZone": "+08:00",
"orderAmount": "9.99",
"orderCurrency": "USD",
"status": "S",
"paymentStatus": "S",
"eci": "5",
"cardBinCountry": "US",
"reason": "{\"respCode\":\"20000\",\"respMsg\":\"Success\"}",
"sign": "replace_with_sha256_signature",
"paymentMethod": "MASTERCARD",
"metaData": "{\"orderSource\":\"web\",\"campaignId\":\"spring_sale\"}",
"channelRequestId": "replace_with_channel_request_id"
}Acknowledgement
Return HTTP 200 with the received
transactionId as the raw response body after the payment result webhook is received and accepted.replace_with_transaction_id