XML 23 R70.htm IDEA: XBRL DOCUMENT v2.4.1.9
Loans Receivable (Aging of recorded investment in gross loans) (Details) (USD $)
In Thousands, unless otherwise specified
Dec. 31, 2014
Dec. 31, 2013
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Loans $ 4,578,431us-gaap_LoansAndLeasesReceivableGrossCarryingAmount $ 4,669,192us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing   0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
Originated Loans [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 94,218us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
87,623us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 45,366us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
31,619us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 116,065us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
95,052us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 255,649us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
214,294us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 2,588,176us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,187,246us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 2,843,825us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,401,540us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 3,354us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,875us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Mortgages [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 42,785us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
52,364us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 25,886us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
19,664us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 98,131us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
74,156us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 166,802us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
146,184us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 624,949us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
620,081us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 791,751us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
766,265us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 3,354us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,875us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_MortgagesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Traditional loan    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 33,109us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
39,388us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 18,196us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
12,942us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 38,551us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
23,595us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 89,856us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
75,925us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 529,492us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
526,263us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 619,348us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
602,188us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 588us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
690us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConventionalLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Originated Up To The Year 2002 [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 4,128us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
6,697us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 3,157us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,635us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 4,395us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
3,408us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 11,680us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
11,740us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 54,064us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
64,772us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 65,744us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
76,512us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 134us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
79us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedUpToYear2002Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Originated In The Years 2003 And 2004 [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 10,484us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,722us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 4,735us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,163us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 6,489us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,845us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 21,708us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
8,730us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 87,961us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
56,387us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 109,669us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
65,117us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2003And2004Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Originated In The Year 2005 [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 3,824us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
8,527us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 2,205us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,119us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 4,454us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,808us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 10,483us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
15,454us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 49,989us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
74,087us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 60,472us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
89,541us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2005Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Originated In The Year 2006 [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 5,706us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
12,055us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 3,298us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,312us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 8,667us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,418us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 17,671us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
20,785us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 67,879us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
99,537us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 85,550us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
120,322us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 89us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYear2006Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Originated In The Years 2007 2008 And 2009 [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 5,283us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
3,464us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 1,809us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,104us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 7,646us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,663us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 14,738us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
9,231us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 78,751us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
91,919us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 93,489us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
101,150us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
152us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears20072008And2009Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Originated In The Years 2010 2011 2012 2013 And 2014 [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 3,684us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
3,923us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 2,992us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,609us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 6,900us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,453us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 13,576us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
9,985us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 190,848us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
139,561us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 204,424us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
149,546us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 365us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
459us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OriginatedInYears2010201120122013And2014Member
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | NonTraditional Mortgage [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 1,477us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
3,217us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 584us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,162us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 3,223us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,311us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 5,284us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
6,690us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 30,916us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
35,412us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 36,200us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
42,102us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_NontraditionalMortgageMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Loss Mitigation Program [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 8,199us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
9,759us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 7,106us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
5,560us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 14,114us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
13,191us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 29,419us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
28,510us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 64,024us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
57,808us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 93,443us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
86,318us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 2,766us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,185us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_LossMitigationProgramMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Home equity secured personal loans [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
138us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
138us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 517us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
598us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 517us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
736us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_HomeEquitySecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | GNMA's Buy Back Option related    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 42,243us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
34,921us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 42,243us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
34,921us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 0us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 42,243us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
34,921us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_OptionOnSecuritiesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Commercial Loan [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
Total Loans 1,289,732us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,127,657us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 330us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
5,609us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 1,206us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,015us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 7,671us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
13,484us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 9,207us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
20,108us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 514,436us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
380,453us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 523,643us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
400,561us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
 
Originated Loans [Member] | Corporate Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 133,076us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
54,796us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 133,076us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
54,796us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Institutional Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 36,611us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,050us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 36,611us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,050us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Middle Market Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,356us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 645us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 396us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
10,294us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 1,041us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
11,650us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 163,009us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
149,933us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 164,050us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
161,583us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Retail Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 330us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,253us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 561us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,015us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 7,275us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
3,190us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 8,166us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
8,458us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 167,462us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
158,184us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 175,628us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
166,642us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Floor Plan Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 1,650us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,835us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 1,650us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,835us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Real Estate Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 12,628us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
11,655us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 12,628us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
11,655us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RealEstateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Other Commercial and Industrial[Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 866us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,105us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 412us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
851us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 1,679us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,673us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 2,957us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4,629us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 763,132us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
722,467us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 766,089us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
727,096us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Corporate Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
236us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
 
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
236us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 63,746us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
32,362us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 63,746us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
32,598us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Institutional Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
 
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
 
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 478,935us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
536,445us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 478,935us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
536,445us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Middle Market Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
299us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 618us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,134us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 618us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,433us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 91,716us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
57,464us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 92,334us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
58,897us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_MiddleMarketOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Retail Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 866us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,830us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 412us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
552us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 1,061us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
539us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 2,339us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,921us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 87,832us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
58,589us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 90,171us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
61,510us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Floor Plan Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
39us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
39us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 40,903us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
37,607us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 40,903us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
37,646us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Consumer Loan [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 2,579us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,014us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 946us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
652us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 1,164us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
650us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 4,689us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
3,316us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 182,071us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
124,428us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 186,760us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
127,744us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Credit Cards [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 360us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
287us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 139us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
168us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 375us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
232us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 874us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
687us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 18,197us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
14,554us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 19,071us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
15,241us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Overdrafts [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 20us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
46us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
4us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 20us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
50us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 287us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
322us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 307us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
372us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_BankOverdraftsMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Unsecured personal lines of credit [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 102us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
33us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 25us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
38us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 102us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
66us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 229us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
137us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 1,971us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,844us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 2,200us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,981us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLinesOfCreditMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Unsecured personal loans [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 1,822us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
1,324us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 743us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
399us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 678us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
352us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 3,243us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
2,075us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 144,696us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
92,485us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 147,939us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
94,560us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Cash collateral personal loans [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 275us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
324us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 39us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
43us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 9us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 323us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
367us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 16,920us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
15,223us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 17,243us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
15,590us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CashCollateralPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Originated Loans [Member] | Auto and Leasing loans receivable    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 47,658us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
25,531us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
60 - 89 Days Past Due 16,916us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
9,437us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
90+ Days Past Due 7,420us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
5,089us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Past Due 71,994us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
40,057us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Current 503,588us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
339,817us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Total Loans 575,582us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
379,874us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_AutoAndLeasingLoansReceivableMember
/ ofg_ReceivableComponentsAxis
= ofg_OriginatedLoansMember
Non-covered acquired loans accounted for under ASC 310-20    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 12,887us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
17,144us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 4,417us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
6,848us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 3,849us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
5,413us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 21,153us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
29,405us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 221,648us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
406,034us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 242,801us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
435,439us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Commercial Loan [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 357us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,197us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 263us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,025us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 1,111us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,646us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 1,731us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
5,868us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 10,944us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
71,813us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 12,675us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
77,681us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CommercialLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
431us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 62us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
331us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 696us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
969us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 758us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,731us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 3,724us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
16,882us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 4,482us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
18,613us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Corporate Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 0us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
10,166us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 0us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
10,166us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Retail Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
431us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
331us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 351us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
868us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 351us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,630us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 0us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
4,140us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 351us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
5,770us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Floor Plan Commercial Secured [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 62us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 345us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
101us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 407us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
101us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 3,724us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,576us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 4,131us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,677us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanCommercialSecuredMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Other Commercial and Industrial[Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 357us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,766us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 201us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,694us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 415us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
677us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 973us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
4,137us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 7,220us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
54,931us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 8,193us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
59,068us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_OtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Corporate Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
14us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
83us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
97us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 0us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
9,696us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 0us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
9,793us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_CorporateOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Institutional Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
 
60 - 89 Days Past Due 0us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
 
90+ Days Past Due 0us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
 
Total Past Due 0us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
 
Current 0us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
 
Total Loans 0us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
 
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_InstitutionalOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
 
Non-covered acquired loans accounted for under ASC 310-20 | Retail Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 155us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,717us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 67us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,418us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 192us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
659us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 414us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
3,794us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 3,707us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
23,544us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 4,121us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
27,338us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_RetailOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Floor Plan Other Commercial [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 202us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
35us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 134us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
193us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 223us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
18us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 559us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
246us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 3,513us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
21,691us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 4,072us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
21,937us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_FloorPlanOtherCommercialMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Consumer Loan [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 1,527us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,413us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 701us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,207us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 1,476us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,159us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 3,704us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
5,779us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 41,640us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
50,395us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 45,344us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
56,174us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_ConsumerLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Credit Cards [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 1,376us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,217us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 654us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,200us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 1,399us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
2,068us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 3,429us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
5,485us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 38,419us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
46,714us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 41,848us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
52,199us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_CreditCardReceivablesMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Unsecured personal loans [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 151us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
196us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 47us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
7us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 77us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
91us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 275us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
294us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 3,221us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
3,681us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 3,496us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
3,975us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= ofg_UnsecuredPersonalLoansMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Non-covered acquired loans accounted for under ASC 310-20 | Automobile Loan [Member]    
Financing Receivable, Recorded Investment, Past Due [Line Items]    
30 - 59 Days Past Due 11,003us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
12,534us-gaap_FinancingReceivableRecordedInvestment30To59DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
60 - 89 Days Past Due 3,453us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
3,616us-gaap_FinancingReceivableRecordedInvestment60To89DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
90+ Days Past Due 1,262us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
1,608us-gaap_FinancingReceivableRecordedInvestmentEqualToGreaterThan90DaysPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Past Due 15,718us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
17,758us-gaap_FinancingReceivableRecordedInvestmentPastDue
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Current 169,064us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
283,826us-gaap_FinancingReceivableRecordedInvestmentCurrent
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Total Loans 184,782us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
301,584us-gaap_LoansAndLeasesReceivableGrossCarryingAmount
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
Financing Receivable Recorded Investment 90 Days Past Due And Stil lAccruing $ 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member
$ 0us-gaap_FinancingReceivableRecordedInvestment90DaysPastDueAndStillAccruing
/ us-gaap_FinancingReceivableRecordedInvestmentByClassOfFinancingReceivableAxis
= us-gaap_AutomobileLoanMember
/ ofg_ReceivableComponentsAxis
= ofg_AccountedForUnderAsc31020Member