ACH NOC and SEC handling
Learn how external account information is updated.
When you originate an ACH transaction with Stripe (for example, using InboundTransfer, OutboundTransfer, or OutboundPayment objects with Financial Accounts for platforms), the financial institution receiving the transaction might return a Notification of Change (NOC). This is a message indicating that new information is available about the destination account (such as a new account number or routing number).
ACH network rules require Stripe to update saved account information when we receive an NOC. We automatically process the NOC by updating the relevant PaymentMethod or BankAccount object and notify you through a webhook. You might want to monitor these webhooks to inform your users that account information has changed or to update account information that you’ve persisted outside of Stripe.
| NOC type | Fields updated |
|---|---|
| Account number | account_, last4, fingerprint |
| Routing number | routing_, fingerprint |
| Account use (for example, checking or savings) | account_, fingerprint |
NOCs aren’t processed for OutboundPayment objects where payment method details are provided inline (using destination_) as there is no persisted PaymentMethod or BankAccount object in this case to update.
NOC for a PaymentMethod 
When we receive an NOC for a transaction originated with a PaymentMethod object:
- Stripe updates the
PaymentMethodand triggers apayment_webhook.method. updated - If the
PaymentMethodis attached to aCustomer(for use withOutboundPaymentobjects), Stripe triggers acustomer.webhook.source. updated - If the
PaymentMethodis attached directly to a Stripe account (for use withInboundTransferorOutboundTransferobjects), Stripe triggers anaccount.webhook.external_ account. updated
NOC for a BankAccount 
When we receive an NOC for a transaction originated with a BankAccount object:
- Stripe updates the
BankAccountobject. - If the
BankAccountis attached to aCustomer(for use withOutboundPaymentobjects), Stripe triggers acustomer.webhook.source. updated - If the
BankAccountis attached directly to a Stripe account (for use withInboundTransferorOutboundTransferobjects), Stripe triggers anaccount.webhook.external_ account. updated
In cases where the BankAccount that’s set up as your platform’s primary external account is updated, Stripe also notifies you by email. We don’t send an email for updates to external accounts that are attached to your connected accounts’ Stripe accounts, or for updates to external accounts attached to Customer objects.
Standard SEC handling 
Each ACH transaction has an associated Standard Entry Class (SEC) code that describes the accounts involved and how the transaction was authorized.
Financial Accounts for platforms determines the SEC code based on whether the account receiving the ACH entry is owned by a company or an individual. You specify the account holder type in destination_payment_method_data.us_bank_account.account_holder_type when:
- You make OutboundPayments
- You set up a stored PaymentMethod
Only send InboundTransfers and OutboundTransfers to accounts owned by the FinancialAccount owner and with a company owner type.
SEC codes are determined based on the receiving account’s owner type as follows:
| Money movement | Owner type | SEC code |
|---|---|---|
| InboundTransfer | company | CCD |
| OutboundTransfer | company | CCD |
| OutboundPayment | company | CCD |
| OutboundPayment | individual | PPD |