{"article":{"id":25133498038551,"url":"https://plaid.zendesk.com/api/v2/help_center/en-us/articles/25133498038551.json","html_url":"https://support.plaid.com/hc/en-us/articles/25133498038551-Why-am-I-receiving-R04-returns-for-ACH-transactions-with-a-Chase-TAN-Tokenized-Account-Number","author_id":6208246399383,"comments_disabled":false,"draft":false,"promoted":false,"position":0,"vote_sum":0,"vote_count":0,"section_id":25287101210519,"created_at":"2024-07-24T15:03:19Z","updated_at":"2026-06-03T17:42:59Z","name":"Why am I receiving R04 returns for ACH transactions with a Chase TAN (Tokenized Account Number)?","title":"Why am I receiving R04 returns for ACH transactions with a Chase TAN (Tokenized Account Number)?","source_locale":"en-us","locale":"en-us","outdated":false,"outdated_locales":[],"edited_at":"2026-06-03T17:42:59Z","user_segment_id":null,"permission_group_id":1121774,"content_tag_ids":[],"label_names":[],"body":"<p>These are the primary reasons for R04 returns for ACH transactions with Chase TANs:</p>\n<ul>\n<li>\n<strong>Mismatched account number and routing number</strong><ul>\n<li>The TAN comprises a specific tokenized, or virtual, account number and routing number, which are different from the user's true account numbers. Chase does not share the full true account number and routing number through their APIs. The TAN pair must be used as provided. Combining the normal account number with the TAN routing number, or vice versa, will result in an R04 or other applicable return code.</li>\n</ul>\n</li>\n<li>\n<strong>Truncating digits</strong><ul>\n<li>The tokenized account number shared through the API is 17 digits long, with “00” as the first 2 digits. The two leading 0s may be dropped, but it’s important to keep the remaining 15 digits when generating the Nacha file. Chase has seen instances where leading or trailing digits were dropped, causing the account lookup to fail and an R04 response.</li>\n</ul>\n</li>\n<li>\n<strong>Using a disabled TAN –</strong> <strong>Chase reports that customers using invalid TANs account for the largest number of R04s seen in their logs</strong>.<ul>\n<li>When account access consent is revoked for any reason, the associated TAN is disabled. Chase has seen instances where the TAN was disabled shortly before the ACH transaction, and other instances where the TAN was disabled months prior to the transaction. Using TANs is different from the typical “one and done” account verification. It’s important that you maintain awareness of your user's account consent status before submitting their TANs for transactions.</li>\n<li>Additionally, Plaid provides a webhook to give you real-time alerts when a user updates their data sharing preferences on Chase's domain and a TAN is invalidated. While no action is required, we strongly encourage your team to listen for this webhook in order to be notified of these changes and mitigate issues with Chase TANs. Learn more in our technical docs on the <a href=\"https://plaid.com/docs/api/items/#user_permission_revoked\"><code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">USER_PERMISSION_REVOKED</code></a> webhook.</li>\n<li>\n<code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">USER_PERMISSION_REVOKED</code>: If you receive this webhook for a Chase Item, you should not create any new ACH transfers for that Item, as they will be returned. The TAN associated with the revoked account is no longer valid and cannot be used until access has been re-granted.</li>\n<li>\n<strong>Note:</strong> As of September 24, 2025, Chase no longer fires the legacy <a href=\"https://plaid.com/docs/api/items/#user_account_revoked\"><code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">USER_ACCOUNT_REVOKED</code></a> webhook for these events; <code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">USER_PERMISSION_REVOKED</code> is the canonical signal. Older integrations that previously listened for <code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">USER_ACCOUNT_REVOKED</code> on Chase Items should migrate to <code style=\"border:none;background:#f1f3f5;padding:1px 4px;border-radius:3px;font-size:0.9em;\">USER_PERMISSION_REVOKED</code>.</li>\n</ul>\n</li>\n</ul>","user_segment_ids":[]}}