# Subscription payment webhook

> Receive initial and renewal subscription payment notifications with contract, token, and scenario context.

```yaml
openapi: 3.1.0
info:
  title: Subscription payment webhook
  version: 1.0.0
  description: Receive initial and renewal subscription payment notifications with
    contract, token, and scenario context.
webhooks:
  subscription.payment:
    post:
      summary: Subscription payment webhook
      description: Receive initial and renewal subscription payment notifications with
        contract, token, and scenario context.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                notifyType:
                  type: string
                  description: Notification type, identifying the webhook business category.
                  x-onerway-constraints:
                    - kind: values
                      text: Fixed to `TXN` for subscription payment notifications.
                  x-onerway-signature-participation: included
                transactionId:
                  type: string
                  description: Onerway transaction number generated for this subscription payment,
                    used for tracking, queries, and idempotent processing.
                  x-onerway-constraints:
                    - kind: rule
                      text: This value is a large-ID-style string. Preserve it as a string in
                        JavaScript systems to avoid precision loss.
                  x-onerway-signature-participation: included
                paymentId:
                  type:
                    - string
                    - "null"
                  description: Payment intent ID used to associate this subscription payment flow.
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Can be returned for both initial and renewal payments; some initial
                        subscription payment notifications may omit it.
                      zh: 首次扣款和后续扣款均可返回；部分首次扣款通知可能不返回。
                  x-onerway-signature-participation: included
                txnType:
                  type: string
                  description: Transaction operation type represented by this notification.
                  enum:
                    - SALE
                  x-enum-descriptions:
                    SALE: Payment transaction.
                  x-onerway-constraints:
                    - kind: values
                      text: Fixed to `SALE` for subscription payment notifications.
                  x-onerway-signature-participation: included
                merchantNo:
                  type: string
                  description: Merchant number assigned by Onerway, identifying the merchant
                    account receiving this notification.
                  x-onerway-signature-participation: included
                merchantTxnId:
                  type: string
                  description: Merchant-side transaction number used for reconciliation,
                    deduplication, and subscription payment order association.
                  x-onerway-signature-participation: included
                responseTime:
                  type: string
                  description: Time when Onerway generated this notification result in `yyyy-MM-dd
                    HH:mm:ss` format.
                  x-onerway-signature-participation: included
                txnTime:
                  type: string
                  description: Time when this subscription payment transaction occurred or reached
                    this transaction state in `yyyy-MM-dd HH:mm:ss` format.
                  x-onerway-signature-participation: included
                txnTimeZone:
                  type: string
                  description: Time zone offset used by `txnTime`, in `±HH:mm` format.
                  x-onerway-signature-participation: included
                orderAmount:
                  type: string
                  description: Subscription payment amount, expressed in `orderCurrency`.
                  x-onerway-constraints:
                    - kind: rule
                      text: Amount values are returned as decimal strings. Avoid binary floating-point
                        arithmetic for money.
                  x-onerway-signature-participation: included
                orderCurrency:
                  type: string
                  description: Subscription payment currency, as a three-letter [ISO
                    4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes)
                    currency code.
                  x-onerway-signature-participation: included
                status:
                  type: string
                  description: Processing status of this subscription payment transaction.
                  enum:
                    - S
                    - F
                    - P
                    - R
                    - N
                    - I
                    - U
                  x-enum-descriptions:
                    S: Successful transaction.
                    F: Failed transaction.
                    P: Processing transaction.
                    R: Redirect required.
                    N: Canceled transaction. The transaction was closed because it was not paid
                      within its validity window — for example, the checkout
                      session timed out.
                    I: Under review or approval.
                    U: Waiting for payment.
                  x-onerway-signature-participation: included
                paymentStatus:
                  type:
                    - string
                    - "null"
                  description: Payment-intent-level status for this subscription payment intent.
                  enum:
                    - I
                    - U
                    - P
                    - R
                    - A
                    - O
                    - S
                    - N
                    - null
                  x-enum-descriptions:
                    I: Payment intent initialized.
                    U: Payment intent pending payment.
                    P: Payment intent processing.
                    R: Payment intent requires redirect.
                    A: Payment intent authorized.
                    O: Payment intent remains open.
                    S: Payment intent succeeded.
                    N: Payment intent is closed. It timed out without a successful payment — either
                      no attempt was made or all attempts failed.
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Can be returned for both initial and renewal payments; some initial
                        subscription payment notifications may omit it.
                      zh: 首次扣款和后续扣款均可返回；部分首次扣款通知可能不返回。
                  x-onerway-signature-participation: included
                contractId:
                  type: string
                  description: Subscription contract number for this payment. Save it for later
                    subscription queries, cancellation, or updates.
                  x-onerway-constraints:
                    - kind: rule
                      text: This value is a large-ID-style string. Preserve it as a string in
                        JavaScript systems to avoid precision loss.
                  x-onerway-signature-participation: included
                tokenId:
                  type: string
                  description: Subscription token. Store it together with `contractId`; later
                    subscription charges, queries, and cancellation require both
                    values.
                  x-onerway-constraints:
                    - kind: rule
                      text: This token is only valid for subscription operations. It is not a saved
                        payment method token and cannot be used for
                        `subProductType=TOKEN` payments.
                    - kind: consistency
                      text: For a card subscription created with `subscription.bindCard=true`, the
                        saved payment method token is returned in `cardTokenId`,
                        not in this field. For local payment method
                        subscriptions, the [Saved payment method result
                        webhook](/payments/api-reference/webhooks/payment-method-result)
                        returns this same value in its `tokenId`, where it is
                        also the subscription token. Wallet subscriptions
                        receive only this notification.
                  x-onerway-signature-participation: included
                cardTokenId:
                  type:
                    - string
                    - "null"
                  description: Saved payment method token of the card used for this subscription.
                  x-onerway-constraints:
                    - kind: consistency
                      text: Same value as `tokenId` in the [Saved payment method result
                        webhook](/payments/api-reference/webhooks/payment-method-result);
                        use it to match the two notifications. It is a different
                        token from `tokenId` in this notification.
                    - kind: rule
                      text: "Whether the card was saved is decided by the Saved payment method result
                        webhook: use this token for `subProductType=TOKEN`
                        payments through [Create direct
                        transaction](/payments/api-reference/endpoints/direct-c\
                        reate-transaction) only after that notification returns
                        `status=S`. Onerway saves the card after this payment
                        succeeds, so a failed payment never produces that
                        notification. The order in which your server receives
                        the two notifications is not guaranteed; process each
                        one idempotently."
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Returned only when the initial card subscription was created with
                        `subscription.bindCard=true` and this payment succeeded
                        (`status=S`). Not returned for card subscriptions
                        without `bindCard`, renewal payments, wallet
                        subscriptions, or local payment method subscriptions.
                      zh: 仅当首次卡订阅传入了 `subscription.bindCard=true` 且本次支付成功（`status=S`）时返回；未传 `bindCard`
                        的卡订阅、续费扣款、钱包支付订阅和本地支付方式订阅均不返回。
                  x-onerway-signature-participation: included
                eci:
                  type:
                    - string
                    - "null"
                  description: Electronic Commerce Indicator (ECI), indicating the 3DS
                    authentication state related to the transaction.
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Has a value when card, 3DS, or wallet transactions return ECI.
                      zh: 卡交易或 3DS / wallet 交易返回 ECI 时有值。
                  x-onerway-signature-participation: included
                cardBinCountry:
                  type:
                    - string
                    - "null"
                  description: Card BIN country or region, as an [ISO 3166-1
                    alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
                    two-letter code.
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Has a value when this is a card transaction and the card BIN country or
                        region can be identified.
                      zh: 卡交易且可识别卡 BIN 所属国家 / 地区时有值。
                  x-onerway-signature-participation: included
                reason:
                  type: string
                  description: Transaction result reason object, carried as a JSON string in the
                    notification.
                  contentMediaType: application/json
                  contentSchema:
                    type: object
                    properties:
                      respCode:
                        type: string
                        description: Result code. `20000` means success; other values are error codes.
                      respMsg:
                        type: string
                        description: Human-readable message for the result code.
                  x-onerway-format: json_string
                  x-onerway-signature-participation: included
                sign:
                  type: string
                  description: 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.
                  x-onerway-constraints:
                    - kind: rule
                      text: Exclude `sign` itself from the canonical string when verifying this
                        webhook.
                  x-onerway-signature-participation: signature-field
                paymentMethod:
                  type: string
                  description: Payment method or card brand used by this subscription payment.
                  x-onerway-signature-participation: excluded
                walletTypeName:
                  type:
                    - string
                    - "null"
                  description: Wallet type name.
                  enum:
                    - GooglePay
                    - ApplePay
                    - EXPR
                    - JIOU
                    - XJK
                    - null
                  x-enum-descriptions:
                    GooglePay: Google Pay wallet.
                    ApplePay: Apple Pay wallet.
                    EXPR: "Wallet funding source: bank card."
                    JIOU: "Wallet funding source: Baitiao."
                    XJK: "Wallet funding source: Xiaojinku."
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Returned for wallet subscriptions. Not returned for card or local payment
                        method subscriptions.
                      zh: 钱包支付订阅返回；卡订阅和本地支付方式订阅不返回。
                  x-onerway-signature-participation: excluded
                subscriptionManageUrl:
                  type:
                    - string
                    - "null"
                  description: Subscription management URL that the buyer can use to view and
                    manage the subscription.
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Has a value when a subscription management URL is returned; some
                        subscription payment notifications may omit it.
                      zh: 返回订阅管理地址时有值；部分订阅扣款通知可能不返回。
                  x-onerway-signature-participation: included
                subscriptionStatus:
                  type: string
                  description: Current lifecycle status of the subscription contract.
                  enum:
                    - trialing
                    - paymentdue
                    - active
                    - pastdue
                    - paused
                    - canceled
                    - ended
                  x-enum-descriptions:
                    trialing: Trial period before the paid subscription starts.
                    paymentdue: Payment is due or processing; the subscription contract is not
                      active yet.
                    active: The subscription is active and all due payments have been paid.
                    pastdue: Payment is overdue; retry or collection remains pending.
                    paused: The subscription is temporarily paused after all payment attempts for a
                      billing cycle failed; the contract stays enabled.
                    canceled: The subscription was canceled before the planned end.
                    ended: The subscription ended naturally by date or after all billing cycles
                      completed.
                  x-onerway-signature-participation: included
                dataStatus:
                  type: string
                  description: Enablement status of the subscription contract.
                  enum:
                    - "0"
                    - "1"
                    - "2"
                    - "3"
                  x-enum-descriptions:
                    "0": Pending activation.
                    "1": Active.
                    "2": Inactive.
                    "3": Canceled.
                  x-onerway-signature-participation: included
                products:
                  type: string
                  description: Product list submitted in `txnOrderMsg.products` of the
                    subscription request, returned as a JSON string.
                  contentMediaType: application/json
                  contentSchema:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          description: Product name.
                        price:
                          type: string
                          description: Product unit price as a decimal string.
                          x-onerway-constraints:
                            - kind: rule
                              text: Amount values are returned as decimal strings. Avoid binary floating-point
                                arithmetic for money.
                        num:
                          type: string
                          description: Product quantity.
                        currency:
                          type: string
                          description: Product currency, as a three-letter [ISO
                            4217](https://en.wikipedia.org/wiki/ISO_4217#List_of_ISO_4217_currency_codes)
                            currency code.
                        type:
                          type:
                            - string
                            - "null"
                          description: Product line type submitted in `txnOrderMsg.products[].type` of the
                            request.
                          x-onerway-value:
                            nullable: true
                            empty: true
                            when:
                              en: Empty string or omitted when the request did not submit it.
                              zh: 请求未提交时为空字符串或不返回。
                        retailerId:
                          type:
                            - string
                            - "null"
                          description: Identifier of the retailer that sells this product.
                          x-onerway-value:
                            nullable: true
                            empty: true
                            when:
                              en: Has a value when the subscription was created with retailer information.
                                Subscriptions without retailers do not return
                                it.
                              zh: 订阅创建时传入了零售商信息时有值；未传 retailers 的订阅不返回。
                          x-onerway-lifecycle:
                            status: new
                            since: 2026-08-10
                            description:
                              en: New field linking each product to its retailer.
                              zh: 将商品关联到零售商的新增字段。
                  x-onerway-format: json_string
                  x-onerway-signature-participation: included
                metaData:
                  type:
                    - string
                    - "null"
                  description: Custom data submitted in the request, returned unchanged as the
                    original JSON string.
                  x-onerway-constraints:
                    - kind: consistency
                      text: If both the top-level `metaData` and `subscription.metaData` were
                        submitted, this field returns `subscription.metaData`.
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Returned when `metaData` was submitted in the request; empty or omitted
                        otherwise.
                      zh: 请求提交了 `metaData` 时返回，否则为空或不返回。
                  x-onerway-signature-participation: included
                channelRequestId:
                  type: string
                  description: Payment channel or processor request identifier, used for
                    channel-side reconciliation or troubleshooting.
                  x-onerway-signature-participation: included
                scenarios:
                  type:
                    - string
                    - "null"
                  description: Subscription scenario that triggered this notification,
                    distinguishing lifecycle events across the initial payment,
                    renewals, card replacement, plan changes, cancellation, and
                    expiration.
                  enum:
                    - SUBSCRIPTION_INITIAL
                    - SUBSCRIPTION_RENEWAL
                    - SUBSCRIPTION_CARD_REPLACEMENT
                    - SUBSCRIPTION_CHANGED
                    - SUBSCRIPTION_CANCELED
                    - SUBSCRIPTION_ENDED
                    - null
                  x-enum-descriptions:
                    SUBSCRIPTION_INITIAL: Initial subscription payment, usually collected when the
                      subscription contract is created.
                    SUBSCRIPTION_RENEWAL: Recurring subscription payment for a later billing cycle,
                      using the saved `contractId` and `tokenId`.
                    SUBSCRIPTION_CARD_REPLACEMENT: Payment method update for an existing
                      subscription, such as replacing an expired or invalid
                      card.
                    SUBSCRIPTION_CHANGED: Subscription plan modification, such as an upgrade,
                      downgrade, or change to plan terms.
                    SUBSCRIPTION_CANCELED: Subscription cancellation initiated by the customer or
                      the merchant; future billing stops.
                    SUBSCRIPTION_ENDED: Subscription concluded naturally after reaching its
                      predetermined end.
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Returned for card and wallet subscriptions, including renewals. For local
                        payment method subscriptions, the scenario is returned
                        in the Saved payment method result webhook instead, and
                        this notification for the first charge omits it.
                      zh: 卡订阅和钱包支付订阅（含续费）返回；本地支付方式订阅的订阅场景由保存支付方式结果通知返回，首次扣款的本通知不返回。
                  x-onerway-signature-participation: included
                paymentMethodDetails:
                  type:
                    - string
                    - "null"
                  description: Payment method details object. Card transaction details are under
                    the `card` child object.
                  contentMediaType: application/json
                  contentSchema:
                    type: object
                    properties:
                      card:
                        type:
                          - object
                          - "null"
                        properties:
                          checks:
                            type:
                              - object
                              - "null"
                            properties:
                              addressCheck:
                                type:
                                  - string
                                  - "null"
                                description: AVS street-address check result.
                                enum:
                                  - pass
                                  - fail
                                  - unavailable
                                  - unchecked
                                  - notProvided
                                  - unsupported
                                  - null
                                x-enum-descriptions:
                                  pass: The information submitted for verification matches issuer records.
                                  fail: The information submitted for verification does not match issuer records.
                                  unavailable: The issuer does not support this verification.
                                  unchecked: Verification was not performed.
                                  notProvided: The information required for this verification was not provided.
                                  unsupported: AVS is not supported for this transaction.
                                x-onerway-value:
                                  nullable: true
                                  when:
                                    en: Has a value when AVS street-address verification was performed.
                                    zh: 执行 AVS 街道地址校验时有值。
                              postalCodeCheck:
                                type:
                                  - string
                                  - "null"
                                description: AVS postal-code check result.
                                enum:
                                  - pass
                                  - fail
                                  - unavailable
                                  - unchecked
                                  - notProvided
                                  - unsupported
                                  - null
                                x-enum-descriptions:
                                  pass: The information submitted for verification matches issuer records.
                                  fail: The information submitted for verification does not match issuer records.
                                  unavailable: The issuer does not support this verification.
                                  unchecked: Verification was not performed.
                                  notProvided: The information required for this verification was not provided.
                                  unsupported: AVS is not supported for this transaction.
                                x-onerway-value:
                                  nullable: true
                                  when:
                                    en: Has a value when AVS postal-code verification was performed.
                                    zh: 执行 AVS 邮编校验时有值。
                              cardholderNameCheck:
                                type:
                                  - string
                                  - "null"
                                description: American Express AVS result indicating whether the cardholder name
                                  matches issuer records.
                                enum:
                                  - pass
                                  - fail
                                  - unavailable
                                  - unchecked
                                  - notProvided
                                  - unsupported
                                  - null
                                x-enum-descriptions:
                                  pass: The information submitted for verification matches issuer records.
                                  fail: The information submitted for verification does not match issuer records.
                                  unavailable: The issuer does not support this verification.
                                  unchecked: Verification was not performed.
                                  notProvided: The information required for this verification was not provided.
                                  unsupported: AVS is not supported for this transaction.
                                x-onerway-value:
                                  nullable: true
                                  when:
                                    en: Returns the result when American Express cardholder name verification is
                                      performed, or `null` if it is not
                                      performed.
                                    zh: 执行 American Express 持卡人姓名验证时返回验证结果；未执行时返回 `null`。
                              avsResultRawCode:
                                type:
                                  - string
                                  - "null"
                                description: Raw AVS result code returned by the card network.
                                enum:
                                  - N
                                  - S
                                  - U
                                  - R
                                  - W
                                  - Z
                                  - X
                                  - Y
                                  - M
                                  - F
                                  - D
                                  - A
                                  - B
                                  - P
                                  - G
                                  - I
                                  - C
                                  - FD
                                  - NP
                                  - null
                                x-enum-descriptions:
                                  N: Postal code and street address both do not match.
                                  S: AVS is not supported.
                                  U: Verification service unavailable.
                                  R: System unable to perform verification.
                                  W: Nine-digit postal code matches; address does not match.
                                  Z: Five-digit postal code matches; address does not match.
                                  X: Nine-digit postal code and address both match.
                                  Y: Five-digit postal code and address both match.
                                  M: Address and postal code match for an international transaction.
                                  F: Address and postal code match for a United Kingdom transaction.
                                  D: Address and postal code match for an international transaction.
                                  A: Address matches; postal code does not match.
                                  B: Address matches; postal code was not verified.
                                  P: Postal code matches; address was not verified.
                                  G: Non-US AVS participant.
                                  I: International address was not verified.
                                  C: Address and postal code were not verified for a non-US Visa card.
                                  FD: AVS verification unavailable in Onerway.
                                  NP: Address and postal code were not provided.
                                x-onerway-value:
                                  nullable: true
                                  when:
                                    en: Has a value when the card network or Onerway returns a raw AVS result code.
                                    zh: 卡组织或 Onerway 返回原始 AVS 结果码时有值。
                              threeDSecureResult:
                                type:
                                  - object
                                  - "null"
                                properties:
                                  version:
                                    type: string
                                    description: 3D Secure protocol version or `UNKNOWN`.
                                  authenticationFlow:
                                    type:
                                      - string
                                      - "null"
                                    description: 3DS authentication flow type.
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when the 3DS authentication flow can be identified.
                                        zh: 可识别 3DS 认证流程时有值。
                                  chargebackLiability:
                                    type: string
                                    description: 3DS chargeback liability party or `UNKNOWN`.
                                  transStatus:
                                    type:
                                      - string
                                      - "null"
                                    description: 3DS authentication result.
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when ACS returns an authentication status.
                                        zh: ACS 返回认证状态时有值。
                                  transStatusReason:
                                    type:
                                      - string
                                      - "null"
                                    description: Detailed reason for the 3DS authentication status.
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when the authentication status includes a detailed reason.
                                        zh: 需要补充说明 3DS 认证状态时有值。
                                  veresEnrolled:
                                    type:
                                      - string
                                      - "null"
                                    description: 3DS enrollment result.
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when the 3DS enrollment result is returned.
                                        zh: 3DS enrollment 结果返回时有值。
                                  eci:
                                    type:
                                      - string
                                      - "null"
                                    description: Electronic Commerce Indicator (ECI).
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when the 3DS result returns ECI.
                                        zh: 3DS 结果返回 ECI 时有值。
                                  cvvResult:
                                    type:
                                      - string
                                      - "null"
                                    description: CVV security-code check result.
                                    enum:
                                      - M
                                      - N
                                      - P
                                      - S
                                      - U
                                      - I
                                      - null
                                    x-enum-descriptions:
                                      M: CVV matched issuer records.
                                      N: CVV did not match issuer records.
                                      P: CVV processing error.
                                      S: CVV was not provided.
                                      U: Verification service unavailable or unknown.
                                      I: CVV format invalid.
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when the CVV check result is returned.
                                        zh: CVV 校验结果返回时有值。
                                  avsFullResult:
                                    type:
                                      - string
                                      - "null"
                                    description: AVS full address verification result.
                                    enum:
                                      - Y
                                      - N
                                      - A
                                      - Z
                                      - U
                                      - null
                                    x-enum-descriptions:
                                      Y: Postal code and street address both match.
                                      N: Postal code and street address both do not match.
                                      A: Street address matches; postal code does not match.
                                      Z: Postal code matches; street address does not match.
                                      U: Address verification service unavailable.
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when the AVS full-result value is returned.
                                        zh: AVS 综合校验结果返回时有值。
                                  cavvResult:
                                    type:
                                      - string
                                      - "null"
                                    description: CAVV cryptogram returned by 3DS authentication.
                                    x-onerway-value:
                                      nullable: true
                                      when:
                                        en: Has a value when 3DS authentication returns CAVV.
                                        zh: 3DS 认证返回 CAVV 时有值。
                                description: 3D Secure verification result.
                                x-onerway-value:
                                  nullable: true
                                  when:
                                    en: Has a value when 3DS verification results are returned; it can be `null`
                                      when absent.
                                    zh: 返回 3DS 验证结果时有值；未返回时可为 `null`。
                            description: Verification check results, including AVS and 3DS results.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when the payment channel returns AVS, 3DS, or CVV verification
                                  results.
                                zh: 支付渠道返回 AVS / 3DS / CVV 验证结果时有值；未执行或未返回验证结果时可为 `null`。
                          holderName:
                            type:
                              - string
                              - "null"
                            description: Cardholder name.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when cardholder name is returned; wallet transactions can return
                                  `null`.
                                zh: 支付方式详情返回持卡人姓名时有值；钱包交易可能为 `null`。
                          year:
                            type:
                              - string
                              - "null"
                            description: Card expiry year, four digits.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when card expiry year is returned.
                                zh: 返回卡有效期时有值。
                          month:
                            type:
                              - string
                              - "null"
                            description: Card expiry month, two digits (`01`-`12`).
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when card expiry month is returned.
                                zh: 返回卡有效期时有值。
                          cardType:
                            type:
                              - string
                              - "null"
                            description: Card brand or card network.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when the card network returns the card brand.
                                zh: 卡组织返回卡类型时有值。
                          productCategory:
                            type:
                              - string
                              - "null"
                            description: Card product category.
                            enum:
                              - D
                              - P
                              - C
                              - H
                              - R
                              - N
                              - null
                            x-enum-descriptions:
                              D: Debit
                              P: Prepaid
                              C: Credit
                              H: Charge Card
                              R: Deferred Debit
                              N: Unknown
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when the card network returns the product category.
                                zh: 卡组织返回卡产品类别时有值。
                          issuer:
                            type:
                              - string
                              - "null"
                            description: Issuer name.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when the issuer can be identified.
                                zh: 可识别发卡行时有值。
                          cardBinCountry:
                            type:
                              - string
                              - "null"
                            description: Card BIN country or region.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when the card BIN country or region can be identified.
                                zh: 可识别卡 BIN 所属国家 / 地区时有值。
                          authorizationCode:
                            type:
                              - string
                              - "null"
                            description: Issuer or acquiring-side authorization code, used for
                              reconciliation and dispute handling.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when a card transaction is authorized successfully and an
                                  authorization code is returned.
                                zh: 卡交易授权成功并返回授权码时有值。
                          cardNumber:
                            type:
                              - string
                              - "null"
                            description: Masked card number, keeping only the first 6 and last 4 digits.
                            x-onerway-value:
                              nullable: true
                              when:
                                en: Has a value when masked card number is returned.
                                zh: 返回脱敏卡号时有值。
                        description: Card payment method details.
                        x-onerway-value:
                          nullable: true
                          when:
                            en: Has a value when card or wallet-card details are returned.
                            zh: 卡支付或钱包卡交易返回卡详情时有值。
                  x-onerway-value:
                    nullable: true
                    empty: true
                    when:
                      en: Returned when card details are available. Not returned for local payment
                        method subscriptions; some wallet subscriptions omit it.
                      zh: 有卡详情时返回；本地支付方式订阅不返回，部分钱包支付订阅不返回。
                  x-onerway-format: json_string
                  x-onerway-signature-participation: included
            examples:
              subscription_initial_card_saved_card:
                summary: Initial card subscription with saved card
                value:
                  notifyType: TXN
                  transactionId: replace_with_card_sale_transaction_id
                  paymentId: replace_with_card_sale_payment_id
                  txnType: SALE
                  merchantNo: replace_with_merchant_no
                  merchantTxnId: replace_with_merchant_subscription_reference
                  responseTime: 2026-01-15 10:10:02
                  txnTime: 2026-01-15 10:10:00
                  txnTimeZone: +08:00
                  orderAmount: "7.00"
                  orderCurrency: USD
                  status: S
                  paymentStatus: S
                  contractId: replace_with_subscription_contract_id
                  tokenId: replace_with_subscription_token
                  cardTokenId: replace_with_saved_card_token
                  eci: "05"
                  cardBinCountry: US
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: VISA
                  subscriptionManageUrl: https://developers.onerway.com/example-subscription-manage
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"currency":"USD","name":"Example weekly
                    plan","num":"1","price":"7.00","type":""}]'
                  metaData: '{"plan":"weekly"}'
                  channelRequestId: replace_with_card_sale_channel_request_id
                  scenarios: SUBSCRIPTION_INITIAL
                  paymentMethodDetails: '{"card":{"checks":{"addressCheck":null,"postalCodeCheck":null,"cardholderNameCheck":null,"avsResultRawCode":null,"threeDSecureResult":{"version":"UNKNOWN","authenticationFlow":"CHALLENGE","chargebackLiability":"UNKNOWN","transStatus":null,"transStatusReason":null,"veresEnrolled":null,"eci":"05","cvvResult":null,"avsFullResult":null,"cavvResult":"replace_with_cavv"}},"holderName":"Example
                    Cardholder","year":"2028","month":"05","cardType":null,"productCategory":null,"issuer":"Example
                    Issuer","cardBinCountry":"US","authorizationCode":null,"cardNumber":"400000******0002"}}'
              subscription_initial_card:
                summary: Initial card subscription without saving the card
                value:
                  notifyType: TXN
                  transactionId: replace_with_initial_sale_transaction_id
                  paymentId: replace_with_initial_sale_payment_id
                  txnType: SALE
                  merchantNo: replace_with_merchant_no
                  merchantTxnId: replace_with_merchant_subscription_reference
                  responseTime: 2026-01-15 10:20:02
                  txnTime: 2026-01-15 10:20:00
                  txnTimeZone: +08:00
                  orderAmount: "7.00"
                  orderCurrency: USD
                  status: S
                  paymentStatus: S
                  contractId: replace_with_subscription_contract_id
                  tokenId: replace_with_subscription_token
                  eci: "05"
                  cardBinCountry: US
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: VISA
                  subscriptionManageUrl: https://developers.onerway.com/example-subscription-manage
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"currency":"USD","name":"Example weekly
                    plan","num":"1","price":"7.00","type":""}]'
                  metaData: '{"plan":"weekly"}'
                  channelRequestId: replace_with_initial_sale_channel_request_id
                  scenarios: SUBSCRIPTION_INITIAL
                  paymentMethodDetails: '{"card":{"checks":null,"holderName":"Example
                    Cardholder","year":"2028","month":"05","cardType":null,"productCategory":null,"issuer":"Example
                    Issuer","cardBinCountry":"US","authorizationCode":null,"cardNumber":"400000******0002"}}'
              subscription_renewal_payment:
                summary: Subscription renewal payment
                value:
                  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:56:28
                  txnTime: 2026-06-25 13:56:26
                  txnTimeZone: +08:00
                  orderAmount: "29.99"
                  orderCurrency: USD
                  status: S
                  paymentStatus: S
                  contractId: replace_with_subscription_contract_id
                  tokenId: replace_with_subscription_token_id
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: VISA
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"name":"Unlimited","price":"29.99","num":"1","currency":"USD"}]'
                  channelRequestId: replace_with_channel_request_id
                  scenarios: SUBSCRIPTION_RENEWAL
              subscription_renewal_google_pay:
                summary: Google Pay subscription renewal payment
                value:
                  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 14:12:09
                  txnTime: 2026-06-25 14:12:07
                  txnTimeZone: +08:00
                  orderAmount: "17.99"
                  orderCurrency: USD
                  status: S
                  paymentStatus: S
                  contractId: replace_with_subscription_contract_id
                  tokenId: replace_with_subscription_token_id
                  eci: "7"
                  cardBinCountry: US
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: VISA
                  walletTypeName: GooglePay
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"name":"Example unlimited
                    plan","price":"17.99","num":"1","currency":"USD"}]'
                  channelRequestId: replace_with_channel_request_id
                  scenarios: SUBSCRIPTION_RENEWAL
                  paymentMethodDetails: '{"card":{"checks":{"addressCheck":null,"postalCodeCheck":null,"cardholderNameCheck":null,"avsResultRawCode":null,"threeDSecureResult":{"version":"UNKNOWN","authenticationFlow":null,"chargebackLiability":"MERCHANT","transStatus":null,"transStatusReason":null,"veresEnrolled":null,"eci":"07","cvvResult":null,"avsFullResult":null,"cavvResult":null}},"holderName":null,"year":"2027","month":"07","cardType":null,"productCategory":null,"issuer":"Example
                    Issuer","cardBinCountry":"US","authorizationCode":"replace_with_authorization_code","cardNumber":"400000******0002"}}'
              subscription_renewal_apple_pay:
                summary: Apple Pay subscription renewal payment
                value:
                  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 14:31:44
                  txnTime: 2026-06-25 14:31:41
                  txnTimeZone: +08:00
                  orderAmount: "18.99"
                  orderCurrency: USD
                  status: S
                  paymentStatus: S
                  contractId: replace_with_subscription_contract_id
                  tokenId: replace_with_subscription_token_id
                  eci: "7"
                  cardBinCountry: US
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: MASTERCARD
                  walletTypeName: ApplePay
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"name":"Example unlimited
                    plan","price":"18.99","num":"1","currency":"USD"}]'
                  channelRequestId: replace_with_channel_request_id
                  scenarios: SUBSCRIPTION_RENEWAL
                  paymentMethodDetails: '{"card":{"checks":{"addressCheck":null,"postalCodeCheck":null,"cardholderNameCheck":null,"avsResultRawCode":null,"threeDSecureResult":{"version":"UNKNOWN","authenticationFlow":null,"chargebackLiability":"MERCHANT","transStatus":null,"transStatusReason":null,"veresEnrolled":null,"eci":"07","cvvResult":null,"avsFullResult":null,"cavvResult":null}},"holderName":null,"year":"2027","month":"10","cardType":null,"productCategory":null,"issuer":"Example
                    Issuer","cardBinCountry":"US","authorizationCode":"replace_with_authorization_code","cardNumber":"512345******0008"}}'
              subscription_initial_lpms:
                summary: Initial DANA subscription charge
                value:
                  notifyType: TXN
                  transactionId: replace_with_lpms_sale_transaction_id
                  paymentId: replace_with_lpms_payment_id
                  txnType: SALE
                  merchantNo: replace_with_merchant_no
                  merchantTxnId: replace_with_merchant_subscription_reference
                  responseTime: 2026-01-15 10:30:04
                  txnTime: 2026-01-15 10:30:03
                  txnTimeZone: +08:00
                  orderAmount: "39000.00"
                  orderCurrency: IDR
                  status: S
                  paymentStatus: S
                  contractId: replace_with_lpms_subscription_contract_id
                  tokenId: replace_with_lpms_subscription_token
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: DANA
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"currency":"IDR","name":"Example monthly
                    plan","num":"1","price":"39000.00"}]'
                  channelRequestId: replace_with_lpms_sale_channel_request_id
              subscription_initial_google_pay:
                summary: Initial Google Pay subscription
                value:
                  notifyType: TXN
                  transactionId: replace_with_wallet_sale_transaction_id
                  paymentId: replace_with_wallet_sale_payment_id
                  txnType: SALE
                  merchantNo: replace_with_merchant_no
                  merchantTxnId: replace_with_merchant_subscription_reference
                  responseTime: 2026-01-15 10:40:02
                  txnTime: 2026-01-15 10:40:00
                  txnTimeZone: +08:00
                  orderAmount: "20.00"
                  orderCurrency: USD
                  status: S
                  paymentStatus: S
                  contractId: replace_with_wallet_subscription_contract_id
                  tokenId: replace_with_wallet_subscription_token
                  eci: "05"
                  cardBinCountry: US
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: VISA
                  walletTypeName: GooglePay
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"currency":"USD","name":"Example subscription
                    product","num":"1","price":"20.00","type":""}]'
                  channelRequestId: replace_with_wallet_sale_channel_request_id
                  scenarios: SUBSCRIPTION_INITIAL
                  paymentMethodDetails: '{"card":{"checks":null,"holderName":"Example
                    Cardholder","year":"2028","month":"05","cardType":null,"productCategory":null,"issuer":"Example
                    Issuer","cardBinCountry":"US","authorizationCode":null,"cardNumber":"400000******0002"}}'
              subscription_initial_apple_pay:
                summary: Initial Apple Pay subscription
                value:
                  notifyType: TXN
                  transactionId: replace_with_apple_pay_sale_transaction_id
                  txnType: SALE
                  merchantNo: replace_with_merchant_no
                  merchantTxnId: replace_with_merchant_subscription_reference
                  responseTime: 2026-01-15 10:50:21
                  txnTime: 2026-01-15 10:50:00
                  txnTimeZone: +08:00
                  orderAmount: "29.99"
                  orderCurrency: USD
                  status: S
                  contractId: replace_with_apple_pay_subscription_contract_id
                  tokenId: replace_with_apple_pay_subscription_token
                  eci: "5"
                  cardBinCountry: US
                  reason: '{"respCode":"20000","respMsg":"Success"}'
                  sign: replace_with_sha256_signature
                  paymentMethod: VISA
                  walletTypeName: ApplePay
                  subscriptionManageUrl: https://developers.onerway.com/example-subscription-manage
                  subscriptionStatus: active
                  dataStatus: "1"
                  products: '[{"name":"Example subscription
                    product","price":"29.99","num":"1","currency":"USD"}]'
                  channelRequestId: replace_with_apple_pay_sale_channel_request_id
                  scenarios: SUBSCRIPTION_INITIAL
      responses:
        "200":
          description: Return HTTP 200 with the received `transactionId` as the raw
            response body after the subscription payment webhook is received and
            accepted.
          content:
            text/plain:
              schema:
                type: string
              examples:
                return_transaction_id:
                  summary: Return transactionId
                  description: Use a `text/plain` response whose body is the `transactionId` from
                    the received webhook payload.
                  value: replace_with_transaction_id
```
