# Transfer payout failure

Triggered every time a payout fails. Use this event to get further information about a failed payment.
* Event type: `transfers#payout-failure`
* Profile level subscriptions: Supported
* Application level subscriptions: Supported

**Additional info**:
The [transfers#state-change](/api-reference/webhook-event/eventtransfersstatechange) event provides high level information about the state of transfers, but it doesn't provide details about payout failures.
While a transfer is in `outgoing_payment_sent` state, the payout could fail for certain reasons. Additionally, not every payout failure will trigger a change in transfer state. For example a payout might fail with `MANDATE_NOT_FILLED_IN`, but the corresponding transfer might stay in the same state.
We recommend processing both event types(`transfers#payout-failure` and `transfers#state-change`) separate from each other.
For available failure reason codes and descriptions, see the [Payout failures guide](/guides/product/send-money/tracking/payout-failures). Note that Wise can add new failure codes so your system should be able to handle the events even if the failure reason code is not recognised.
To simulate payout failure in sandbox, use the [payout failure simulation endpoint](/api-reference/simulation/simulationtransferpayoutfailure).
Events may not be delivered in the order they occurred. Use `data.occurred_at` to reconcile the order.
See the [Event ordering guide](/guides/developer/webhooks/event-ordering) for details.
See the [Webhooks guide](/guides/developer/webhooks) for setup instructions, signature verification, and best practices.

Endpoint: POST transfers#payout-failure

## Header parameters:

  - `X-Signature-SHA256` (string)
    RSA-SHA256 signature of the request body, Base64 encoded. Verify this against the [Wise public key](/guides/developer/webhooks/event-handling#requests) to ensure the request is authentic and has not been tampered with.

  - `X-Delivery-Id` (string)
    Unique identifier for this webhook delivery attempt.

  - `X-Test-Notification` (boolean)
    Present with the value `true` if this is a test notification sent to verify your callback URL during subscription setup.

## Request fields (application/json):

  - `schema_version` (string)
    Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook).
    Enum: "5.0.0"

  - `subscription_id` (string)
    ID of the webhook subscription that triggered this event.
    Example: 01234567-89ab-cdef-0123-456789abcdef

  - `event_type` (string)
    Event type identifier.
    Example: transfers#payout-failure

  - `sent_at` (string)
    Timestamp when the event was sent.
    Example: 2023-08-10T10:17:28.123Z

  - `data` (object)

  - `data.transfer_id` (integer)
    ID of the transfer.
    Example: 111

  - `data.profile_id` (integer)
    ID of the profile that initiated the transfer.
    Example: 222

  - `data.failure_reason_code` (string)
    Code of the failure error. See [Payout failures](/guides/product/send-money/tracking/payout-failures) for available codes.
    Enum: "ACCOUNT_BLOCKED", "ACCOUNT_CLOSED", "ACCOUNT_DOES_NOT_EXIST", "ACCOUNT_FROZEN", "ACCOUNT_LIMIT_REACHED", "BUSINESS_PAYMENTS_FORBIDDEN", "CANNOT_ACCEPT_FROM_3RD_PARTY", "CREDITING_ACCOUNT_FORBIDDEN", "DUPLICATE_ENTRY", "EXTERNAL_IDENTIFIER_DETAILS_HAVE_CHANGED", "FUNDS_NOT_EXPECTED_RETURNED", "MANDATE_NOT_FILLED_IN", "REASON_NOT_SPECIFIED", "REQUEST_FOR_INFORMATION_EXPIRED", "RETURN_REQUESTED_BY_RECIPIENT", "SENDER_REQUESTED_TO_CANCEL", "TAX_ID_NOT_MATCHING", "TAX_ID_SUSPENDED", "TECHNICAL_ISSUE", "TECHNICAL_ISSUE_RETRYABLE", "WRONG_ACCOUNT_DETAILS", "WRONG_ACCOUNT_NUMBER", "WRONG_ACCOUNT_TYPE", "WRONG_BANK_CODE", "WRONG_BRANCH_CODE", "WRONG_CARD_NUMBER", "WRONG_CARD_TYPE", "WRONG_CURRENCY", "WRONG_ID_NUMBER", "WRONG_NAME", "WRONG_PHONE_NUMBER", "WRONG_REFERENCE", "WRONG_PAYMENT_PURPOSE", "WRONG_RUT_NUMBER"

  - `data.failure_description` (string)
    Description of the failure code. See [Payout failures](/guides/product/send-money/tracking/payout-failures) for available descriptions.
    Example: Payment failed due to a technical issue, Wise will retry

  - `data.occurred_at` (string)
    When the state change occurred.
    Example: 2023-08-10T10:17:23.123Z

## Response 200 fields (application/json):

  - `status` (string)
    Example: ok

