Transfer Reason Codes

Status reasons

If a transfer fails, Orum will send a transfer_updated webhook. The transfer object in the payload will have a status of "failed" and a status_reasons array that explains why the transfer failed. status_reasons will contain a source and/or destination item, depending on where the transfer failure occurred.

status_reasons consist of:

FieldDescription
reason_codeA word-based code created by Orum to describe the reason for the failure. Orum reason codes are rail-agnostic.
reason_code_messageA human-readable description of the reason code.
network_reason_codeThe reason code sent by the network (ex: R01).
network_reason_code_messageThe message sent by the network.
network_reason_code_rail_typeThe payment rail used in the transfer. Either RTP or ACH.

The network_reason_code and network_reason_message fields are populated with what Deliver receives from the network. That network information is mapped to an Orum-created reason_code and reason_code_message, which give a higher-level and more human-readable explanation of the transfer failure.

Example Webhook Payload

{
    "event_id": "cl0e13b9-7311-440b-828a-a5c13c4e342p",
    "event_type": "transfer_updated",
    "created_at": "2022-08-26T18:57:18.087Z",
    "event_data": {
        "transfer": {
            "id": "542dbbe3-cf18-4d94-a490-7dde26f5b5bp",
            "transfer_reference_id": "970d9av1-3m96",
            "amount": 200,
            "currency": "USD",
            "speed": "same_day",
            "source": {
                "account_reference_id": "3c0699pw4-2e4091",
                "customer_reference_id": "9rs61-917dna80"
            },
            "destination": {
                "account_reference_id": "p7db1-2n38ywn",
                "customer_reference_id": "5jd29a-ja2qof612"
            },
            "status": "failed",
            "status_reasons": [
                {
                    "destination": {
                        "reason_code": "unexpected_error",
                        "reason_code_message": "There was an unexpected error with this transfer request",
                        "network_reason_code": "IN03",
                        "network_reason_code_message": "The payment could not be processed at this time due to an unexpected error, please try again later.",
                        "network_reason_code_rail_type": "RTP"
                    },
                    "source": {
                        "reason_code": "insufficient_funds",
                        "reason_code_message": "There was not enough money available to complete the transfer request",
                        "network_reason_code": "AM04",
                        "network_reason_code_message": "R01 INSUFFICENT FUNDS",
                        "network_reason_code_rail_type": "ACH"
                    }
                }
            ]
        }
    }
}

Reason Codes

reason_codereason_code_message
blocked_accountAn account in the transfer request was blocked or prohibits posting of transfers against it
canceled_transferA transfer cancellation request was successful
closed_accountAccount number specified has been closed on the bank of account's books
debit_blockedThe account owner has placed a stop payment on their account
deceased_partyOne of the parties in the transfer request was deceased
duplicated_transferDuplicate of a previous transfer request
enterprise_insufficient_fundsThere is an insufficient enterprise balance and the transfer request cannot be completed
insufficient_fundsThere was not enough money available to complete the transfer request
invalid_accountThe account number provided is invalid or does not exist
invalid_amountThe amount provided in the transfer request was invalid or missing
invalid_country_codeThe country code utilized was invalid
invalid_currencyThe currency provided in the transfer request was invalid or missing
invalid_fieldThere was erroneous, invalid, or missing data in the transfer request
invalid_routingThe routing number provided is invalid or does not exist
regulatory_errorThe transfer could not be completed because of limitations imposed by a regulator
transfer_on_holdTransfer request was questionable or part of anomalous activity
unauthorized_transferA party in the transfer request was either unknown or did not authorize this request
unavailable_financial_institutionSending or receiving financial institution is currently not available or does not support this request type
unexpected_errorThere was an unexpected error with this transfer request
unsupported_transferTransfer type is not supported or forbidden
wire_returnedThe wire was returned from the receiving bank because it was unable to be delivered to the desired destination

Unlike the reason codes above, NOCs can exist on a transfer of anystatus(i.e. it does not have to be "failed"). The status_reasons array will still explain why the NOC occurred.status_reasons will contain a source and/or destination item, depending on where the NOC occurred.

reason_codereason_code_message
notification_of_change_1Incorrect bank account number
notification_of_change_2Incorrect routing number
notification_of_change_3Incorrect transit/routing number and bank account number
notification_of_change_4Bank account name change
notification_of_change_5Incorrect payment code
notification_of_change_6Incorrect bank account number and transit code
notification_of_change_7Incorrect transit/routing number, bank account number and payment code