Annual report pursuant to Section 13 and 15(d)

Outstanding Loans and Leases - Credit Card and Other Consumer - Impaired Loans (Details)

v2.4.1.9
Outstanding Loans and Leases - Credit Card and Other Consumer - Impaired Loans (Details) (Consumer Portfolio Segment, USD $)
In Millions, unless otherwise specified
12 Months Ended
Dec. 31, 2014
Dec. 31, 2013
Dec. 31, 2012
Financing Receivable, Impaired [Line Items]      
Fixed payment plan period for loans modified 60 months    
Threshold period past due for write-off of financing receivable 180 days    
Threshold period past due for write-off of financing receivable after placed on fixed payment plan 120 days    
Direct/Indirect Consumer
     
Impaired Financing Receivable, Unpaid Principal Balance [Abstract]      
With no recorded allowance $ 59us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
$ 75us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
With an allowance recorded 76us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
242us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Total 135us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
317us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Impaired Financing Receivable, Recorded Investment [Abstract]      
With no recorded allowance 25us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
32us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
With an allowance recorded 92us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
282us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Total 117us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
314us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Related Allowance 24us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
84us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
 
Impaired Financing Receivable, Average Recorded Investment [Abstract]      
With no recorded allowance 27us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
42us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
58us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
With an allowance recorded 180us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
456us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
929us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Total 207us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
498us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
987us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Impaired Financing Receivable, Interest Income, Accrual and Cash Basis Method [Abstract]      
With no recorded allowance 0bac_ImpairedFinancingReceivablewithNoRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
0bac_ImpairedFinancingReceivablewithNoRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
0bac_ImpairedFinancingReceivablewithNoRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
With an allowance recorded 9bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
24bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
50bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Total 9bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
24bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
50bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_DirectandIndirectFinancingReceivableMember
Other consumer
     
Impaired Financing Receivable, Unpaid Principal Balance [Abstract]      
With no recorded allowance 0us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
34us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
With an allowance recorded 0us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
27us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Total 0us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
61us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Impaired Financing Receivable, Recorded Investment [Abstract]      
With no recorded allowance 0us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
34us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
With an allowance recorded 0us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
26us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Total 0us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
60us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Related Allowance 0us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
9us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
 
Impaired Financing Receivable, Average Recorded Investment [Abstract]      
With no recorded allowance 33us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
34us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
35us-gaap_ImpairedFinancingReceivableWithNoRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
With an allowance recorded 23us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
28us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
29us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Total 56us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
62us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
64us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Impaired Financing Receivable, Interest Income, Accrual and Cash Basis Method [Abstract]      
With no recorded allowance 2bac_ImpairedFinancingReceivablewithNoRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
2bac_ImpairedFinancingReceivablewithNoRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
2bac_ImpairedFinancingReceivablewithNoRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
With an allowance recorded 1bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
2bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
2bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
Total 3bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
4bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
4bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= bac_OtherFinancingReceivablesMember
United States | Credit Card Receivable
     
Impaired Financing Receivable, Unpaid Principal Balance [Abstract]      
With an allowance recorded 804us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,384us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Total 804us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,384us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Impaired Financing Receivable, Recorded Investment [Abstract]      
With an allowance recorded 856us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,465us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Total 856us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
1,465us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Related Allowance 207us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
337us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
 
Impaired Financing Receivable, Average Recorded Investment [Abstract]      
With an allowance recorded 1,148us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
2,144us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
4,085us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total 1,148us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
2,144us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
4,085us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Impaired Financing Receivable, Interest Income, Accrual and Cash Basis Method [Abstract]      
With an allowance recorded 71bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
134bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
253bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Total 71bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
134bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
253bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= country_US
Non United States | Credit Card Receivable
     
Impaired Financing Receivable, Unpaid Principal Balance [Abstract]      
With an allowance recorded 132us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
200us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Total 132us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
200us-gaap_ImpairedFinancingReceivableUnpaidPrincipalBalance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Impaired Financing Receivable, Recorded Investment [Abstract]      
With an allowance recorded 168us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
240us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Total 168us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
240us-gaap_ImpairedFinancingReceivableRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Related Allowance 108us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
149us-gaap_ImpairedFinancingReceivableRelatedAllowance
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
 
Impaired Financing Receivable, Average Recorded Investment [Abstract]      
With an allowance recorded 210us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
266us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
464us-gaap_ImpairedFinancingReceivableWithRelatedAllowanceAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total 210us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
266us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
464us-gaap_ImpairedFinancingReceivableAverageRecordedInvestment
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Impaired Financing Receivable, Interest Income, Accrual and Cash Basis Method [Abstract]      
With an allowance recorded 6bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
7bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
10bac_ImpairedFinancingReceivablewithRelatedAllowanceInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
Total $ 6bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
$ 7bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember
$ 10bac_ImpairedFinancingReceivableInterestIncomeAccrualMethodandCashMethod
/ bac_FinancingReceivablePortfolioSegmentAxis
= us-gaap_ConsumerPortfolioSegmentMember
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ us-gaap_StatementGeographicalAxis
= bac_NonUnitedStatesMember