# Transfer Callback

> Receive asynchronous callbacks when the transfer status changes and update your business order accordingly.

```yaml
openapi: 3.1.0
info:
  title: Transfer Callback
  version: 1.0.0
  description: Receive asynchronous callbacks when the transfer status changes and
    update your business order accordingly.
webhooks:
  transfer.result:
    post:
      summary: Transfer Callback
      description: Receive asynchronous callbacks when the transfer status changes and
        update your business order accordingly.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                merchantNo:
                  type: string
                  description: Merchant number assigned by Onerway.
                  x-onerway-signature-participation: included
                requestId:
                  type: string
                  description: Merchant request ID used to correlate this notification with your
                    business order.
                  x-onerway-signature-participation: included
                payoutId:
                  type: string
                  description: Onerway payout ID for this transfer.
                  x-onerway-constraints:
                    - kind: rule
                      text: This value can exceed JavaScript safe-integer range. Preserve it as a
                        string when storing or comparing it.
                  x-onerway-signature-participation: included
                status:
                  type: string
                  description: Current transfer status.
                  enum:
                    - A
                    - CA
                    - B
                    - U
                    - V
                    - R
                    - P
                    - S
                    - F
                  x-enum-descriptions:
                    A: Pending review.
                    CA: Under compliance review.
                    B: Pending system check.
                    U: Review rejected.
                    V: System check rejected.
                    R: Ready for payout.
                    P: Payout in progress.
                    S: Succeeded.
                    F: Failed.
                  x-onerway-constraints:
                    - kind: rule
                      text: Use this field as the transfer lifecycle status. Treat `S` as success and
                        `F` as final failure; intermediate values indicate that
                        processing is still continuing or awaiting review.
                  x-onerway-signature-participation: included
                statusTime:
                  type: string
                  description: Time when this status was generated, in `yyyy-MM-dd HH:mm:ss`
                    format.
                  x-onerway-signature-participation: included
                payoutStatusReason:
                  type:
                    - string
                    - "null"
                  description: Additional reason text for the current transfer status.
                  x-onerway-value:
                    nullable: true
                    when:
                      en: Returned when Onerway has an additional reason for the current payout
                        status.
                      zh: 当 Onerway 对当前打款状态提供额外原因时返回。
                  x-onerway-signature-participation: included
                settleCurrency:
                  type: string
                  description: Settlement currency used for the payout request.
                  x-onerway-signature-participation: included
                settleSumAmount:
                  type: number
                  description: Settlement amount submitted for this payout.
                  x-onerway-signature-participation: included
                payoutCurrency:
                  type: string
                  description: Beneficiary receive currency.
                  x-onerway-signature-participation: included
                payoutAmount:
                  type: number
                  description: Amount received by the beneficiary in `payoutCurrency`.
                  x-onerway-signature-participation: included
                serviceFee:
                  type:
                    - number
                    - "null"
                  description: Service fee charged for this payout.
                  x-onerway-value:
                    nullable: true
                    when:
                      en: Returned when a service fee is charged for this payout.
                      zh: 当本次打款收取手续费时返回。
                  x-onerway-signature-participation: included
                convRate:
                  type:
                    - number
                    - "null"
                  description: Conversion rate used for this payout.
                  x-onerway-value:
                    nullable: true
                    when:
                      en: Returned when currency conversion is applied between settlement and payout
                        currencies.
                      zh: 当结算币种与到账币种之间发生汇兑时返回。
                  x-onerway-signature-participation: included
            examples:
              transfer_result_processing:
                summary: Transfer still processing
                value:
                  merchantNo: replace_with_merchant_no
                  requestId: replace_with_request_id
                  payoutId: replace_with_payout_id
                  status: P
                  statusTime: 2025-01-15 08:32:10
                  payoutStatusReason: Submitted to downstream payout channel
                  settleCurrency: USD
                  settleSumAmount: 100
                  payoutCurrency: EUR
                  payoutAmount: 92.35
                  serviceFee: 2.5
                  convRate: 0.9235
              transfer_result_succeeded:
                summary: Transfer succeeded
                value:
                  merchantNo: replace_with_merchant_no
                  requestId: replace_with_request_id
                  payoutId: replace_with_payout_id
                  status: S
                  statusTime: 2025-01-15 08:51:40
                  payoutStatusReason: null
                  settleCurrency: USD
                  settleSumAmount: 100
                  payoutCurrency: EUR
                  payoutAmount: 92.35
                  serviceFee: 2.5
                  convRate: 0.9235
              transfer_result_failed:
                summary: Transfer failed
                value:
                  merchantNo: replace_with_merchant_no
                  requestId: replace_with_request_id
                  payoutId: replace_with_payout_id
                  status: F
                  statusTime: 2025-01-15 09:12:05
                  payoutStatusReason: Beneficiary account verification failed
                  settleCurrency: USD
                  settleSumAmount: 100
                  payoutCurrency: EUR
                  payoutAmount: 0
                  serviceFee: null
                  convRate: null
      responses:
        "200":
          description: Return HTTP 200 with a plain-text body of `SUCCESS` after the
            notification is received and processed successfully.
          content:
            text/plain:
              schema:
                type: string
              examples:
                return_success:
                  summary: Return SUCCESS
                  description: Return the exact success string expected by the legacy transfer
                    webhook.
                  value: SUCCESS
```
