Onerway
POST

Payment result webhook

Webhook URL
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 guide

All payload fields are included in the signature except:

Webhook payload fields

notifyType
Notification type, identifying the webhook business category.
Constraints
Values
Fixed to TXN for ordinary payment result notifications.
transactionId
Onerway 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.
paymentId
Payment intent ID used to associate the same payment flow.
Constraints
Consistency
Do not confuse it with transactionId; transactionId identifies a specific transaction, while paymentId identifies the payment intent.
txnType
Transaction operation type represented by this notification.
Allowed values
SALE
Payment transaction.
Constraints
Values
Fixed to SALE for ordinary payment result notifications.
merchantNo
Merchant number assigned by Onerway, identifying the merchant account receiving this notification.
merchantTxnId
Merchant-side transaction number, used for merchant reconciliation, deduplication, and original order association.
responseTime
Time when Onerway generated this notification result in yyyy-MM-dd HH:mm:ss format.
txnTime
Time when the transaction occurred or reached this transaction state in yyyy-MM-dd HH:mm:ss format.
txnTimeZone
Time zone offset used by txnTime, in ±HH:mm format.
orderAmount
Original order amount, expressed in orderCurrency.
Constraints
Rule
Amount values are returned as decimal strings. Avoid binary floating-point arithmetic for money.
orderCurrency
Original order currency, as a three-letter ISO 4217 currency code.
status
Current 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
S means the transaction succeeded, F means it failed or was declined, and N means it was canceled. Use this field to determine the result of the current transactionId, together with paymentStatus for payment-intent state.
paymentStatus
Payment-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.
eci
Electronic Commerce Indicator (ECI), indicating the 3DS authentication state related to the transaction.
cardBinCountry
Card BIN country or region, as an ISO 3166-1 alpha-2 two-letter code.
Transaction result reason object, carried as a JSON string in the notification.
sign
Legacy 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 sign itself from the canonical string when verifying this webhook.
paymentMethod
Payment method or card brand used by this transaction.
metaData
Merchant-defined transaction metadata returned according to the request value.
walletTypeName
Wallet type name.
Allowed values
GooglePay
Google Pay wallet.
ApplePay
Apple Pay wallet.
EXPR
Wallet funding source: bank card.
channelRequestId
Payment channel or processor request identifier, used for channel-side reconciliation or troubleshooting.
Order product list, carried as a JSON string in the notification.
Payment method details object. Card transaction details are under the card child object.

Webhook example

{
  "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.

Response body example

replace_with_transaction_id