A single letter or number can be the difference between a tax-free rollover and a surprise bill from the IRS. That character lives in Box 7 of Form 1099-R, and most people never look at it until something goes wrong.
If you took money out of a retirement account last year—a 401(k), an IRA, a pension, an annuity—you received a Form 1099-R. The dollar amounts grab your attention, but the real story is told by the short code in Box 7. It tells the IRS why the money moved, and that "why" decides whether your withdrawal is taxable, penalty-free, or about to cost you an extra 10%.
This guide decodes every Box 7 code, explains what each one means for your tax bill, and shows you how to catch the coding errors that quietly overcharge taxpayers every filing season.
What Form 1099-R Actually Reports
Form 1099-R reports distributions of $10 or more from retirement and pension arrangements. That includes traditional and Roth IRAs, 401(k) and 403(b) plans, pensions, profit-sharing plans, annuities, and certain life insurance contracts. The plan administrator, custodian, or insurer files a copy with the IRS and sends you one.
The form has several boxes, but three carry most of the weight:
- Box 1 – the gross distribution (the total amount that left the account).
- Box 2a – the taxable amount (often less than Box 1, and sometimes blank).
- Box 7 – the distribution code(s) that classify the transaction.
Box 7 is the interpreter. It translates a number in Box 1 into a tax outcome. The IRS uses it to decide, automatically, whether your return should show ordinary income, an early-withdrawal penalty, or nothing taxable at all. When the code is wrong, the IRS's automated systems are wrong too—and they will assume the form is right and your return is the problem.
How Box 7 Codes Work
Box 7 holds one or two characters. Codes are either numbers (1 through 9) or letters (A through Y). When two codes appear together, the first describes the primary nature of the distribution and the second adds context—usually the account type or a special circumstance.
For example:
- 7 alone means a normal distribution.
- G alone means a direct rollover.
- 4G means a death distribution that was directly rolled over by a beneficiary.
- B with another code signals that a designated Roth account was involved.
Not every combination is valid. The IRS publishes a chart of allowable pairs in the Instructions for Forms 1099-R and 5498. A nonsensical pairing—or two codes that contradict each other—is itself a red flag worth questioning.
The Numeric Codes (1–9)
Numbers describe the event: an early withdrawal, a death, a correction. These are the codes that most often trigger taxes and penalties.
Code 1 – Early Distribution, No Known Exception
You took money out before age 59½, and the payer has no evidence that an exception applies. This is the code that costs people the most. It generally means the distribution is fully taxable as ordinary income and subject to the 10% early-withdrawal penalty.
The critical word is "known." The payer codes based on what it can see. If you qualified for an exception—first-time home purchase, qualified education expenses, high unreimbursed medical costs, a series of substantially equal periodic payments—the payer often has no way to know. You claim the exception yourself on Form 5329. Code 1 is not a verdict; it is the starting point.
Code 2 – Early Distribution, Exception Applies
You are under 59½, but the payer knows an exception is in play. Income tax still applies, but the 10% penalty does not. You will see Code 2 on Roth conversions, certain substantially-equal-payment arrangements, and distributions made under an IRS levy.
Code 3 – Disability
The recipient is disabled under the tax code's definition. No penalty applies; ordinary income tax still does.
Code 4 – Death
The distribution went to a beneficiary or estate after the account owner died. There is no early-withdrawal penalty on a death distribution, regardless of the beneficiary's age. The money is still taxable based on the account type (a Roth account may be tax-free; a traditional account is generally taxable).
Code 5 – Prohibited Transaction
The IRA engaged in a prohibited transaction—self-dealing, using the account as loan collateral, or similar. This is severe: the account can lose its tax-deferred status, making the entire balance taxable.
Code 6 – Section 1035 Exchange
A tax-free exchange of one annuity or life insurance contract for another. No immediate tax consequences.
Code 7 – Normal Distribution
The recipient is at least 59½ (or the distribution otherwise qualifies as normal). Ordinary income tax applies; no penalty. This is the most common code on retirees' forms—and, unfortunately, one of the most misapplied. A payer that defaults to Code 7 when a different code fits can mask a penalty exception or misstate a Roth distribution.
Code 8 – Excess Contribution, Corrected Same Year
You put too much into a plan and the excess (plus earnings) was returned in the same year. The earnings portion is taxable.
Code 9 – Cost of Current Life Insurance Protection
Reports the cost of life insurance protection inside a plan. Generally a small amount with no penalty.
The Letter Codes (A–Y)
Letters describe the account type or a special status. Several of the most consequential ones involve Roth accounts and rollovers.
Code A – 10-Year Tax Option Available
The distribution may qualify for special 10-year averaging—relevant only to plan participants born before January 2, 1936. A narrow but valuable benefit.
Code B – Designated Roth Account
The distribution came from a designated Roth account inside an employer plan (a Roth 401(k) or Roth 403(b)), not a Roth IRA. Code B usually appears paired with a numeric code. Important: a Roth 401(k) distribution is not automatically tax-free—qualification rules still apply.
Code G – Direct Rollover
The money moved directly from one eligible plan to another, or to an IRA, without passing through your hands. A properly coded G distribution is not taxable—Box 2a should typically show $0. Code G is the rollover you want to see.
Code H – Direct Rollover of a Designated Roth Account to a Roth IRA
The Roth portion of an employer plan rolled directly into a Roth IRA. Tax-deferred when done correctly.
Code J – Early Distribution from a Roth IRA
A Roth IRA distribution taken before 59½ with no known exception. Your own contributions come out tax- and penalty-free, but earnings can be taxable and penalized. The payer cannot always tell contributions from earnings—you sort that out on Form 8606.
Code L – Deemed Distribution from a Loan
A plan loan that defaulted or violated the rules and is now treated as a taxable distribution.
Code M – Qualified Plan Loan Offset
You left a job with an outstanding 401(k) loan, and the unpaid balance was offset against your account. Code M matters because it buys you time: you can roll over the offset amount until the due date of your tax return (including extensions), avoiding tax and penalty. Code L does not give you that window. Confusing the two is a costly mistake.
Code N – Recharacterization of a Current-Year IRA Contribution
You moved a contribution made for the current tax year from one type of IRA to another (for example, Roth to traditional) before the deadline.
Code P – Excess Contribution Taxable in the Prior Year
A return of an excess contribution; the earnings are taxable in the year the contribution was originally made, not the year reported.
Code Q – Qualified Roth IRA Distribution
The Roth IRA distribution is fully qualified: the five-year holding period is met and the owner is at least 59½, disabled, or deceased. Code Q means the entire distribution is tax-free and penalty-free. This is the best code a Roth saver can see.
Code R – Recharacterization of a Prior-Year IRA Contribution
Same idea as Code N, but for a contribution made in the prior year.
Code S – Early SIMPLE IRA Distribution Within the First Two Years
A SIMPLE IRA distribution taken before 59½ within two years of your first plan contribution. The penalty here is 25%, not 10%—one of the harshest in the code list.
Code T – Roth IRA Distribution, Exception Applies
A Roth IRA distribution where the owner is 59½, disabled, or deceased, but the payer cannot confirm the five-year holding period was met. Often tax-free in practice; you confirm it on Form 8606.
Code U – ESOP Dividend Distribution
Dividends paid from an employee stock ownership plan. Not eligible for rollover.
Code Y – Qualified Charitable Distribution (New)
Starting with 2025 forms, the IRS added Code Y to flag a qualified charitable distribution—money sent directly from an IRA to an eligible charity. Code Y appears alongside a numeric code (typically 4, 7, or K) and signals that the distribution can be excluded from taxable income as a QCD. For 2025, entering Code Y is optional for payers, so its absence does not mean your QCD failed to qualify. If you made a QCD, make sure your return reflects it whether or not Code Y appears.
The Mistakes That Cost Taxpayers Money
Box 7 codes are entered by people and software, and they are wrong more often than you would expect. These are the errors worth hunting for before you file.
Code 1 when an exception applies. This is the single most expensive error. The payer codes a "1" because it has no knowledge of your exception. If you do nothing, you pay a 10% penalty you do not owe. The fix is not to demand a corrected form—it is to file Form 5329 and claim the exception yourself.
Treating every Roth distribution as tax-free. Code B (Roth 401(k)) and codes J and T (Roth IRA) do not guarantee a tax-free result. Qualification depends on the five-year rule and your age. Only Code Q and Code H reliably mean "no tax."
Mixing up Code L and Code M. A loan offset (M) can still be rolled over and rescued from taxation; a deemed distribution (L) generally cannot. If you left a job with a 401(k) loan, confirm which code you received.
A missing or wrong Code G on a rollover. If you completed a direct rollover but Box 7 shows a "1" or "7" instead of "G"—or Box 2a shows a taxable amount—the IRS will treat your tax-free rollover as a taxable withdrawal. Contact the payer for a corrected 1099-R.
Ignoring the SIMPLE IRA two-year window. Code S carries a 25% penalty. If you see it and believe the two-year period had passed, the code may be wrong.
When you spot a genuine error, ask the payer to issue a corrected Form 1099-R. When the code is technically right but does not capture your situation (the classic Code 1 exception), correct it on your own return with the appropriate form instead.
Why Your Own Records Matter More Than the Form
Form 1099-R is the payer's version of events. It is usually accurate, but "usually" is doing a lot of work when a penalty is on the line. The taxpayers who catch coding errors are the ones who already know what they did: which account the money came from, whether it was a rollover or a withdrawal, what their cost basis is, and when their Roth five-year clock started.
That knowledge does not come from a single form in January. It comes from tracking your accounts year-round. When you record every contribution, conversion, rollover, and distribution as it happens, the 1099-R becomes something you verify rather than something you trust. You can match Box 1 to your own ledger, confirm Box 2a, and challenge a code with evidence in hand.
Plain-text accounting makes that kind of record-keeping durable. Because your financial data lives in readable text files you control—not locked inside a custodian's portal—you have a permanent, searchable history of every account movement. When a 1099-R arrives with a questionable code, you are not reconstructing the year from memory; you are reading it back from your own books.
Keep Your Retirement Records Straight Year-Round
Decoding Box 7 is easier when you already know the story behind every distribution. Maintaining clear, continuous records of your retirement accounts—contributions, rollovers, conversions, and withdrawals—turns tax season from a guessing game into a quick reconciliation.
Beancount.io offers plain-text accounting that gives you complete transparency and control over your financial data—no black boxes, no vendor lock-in, and a full history you can audit at any time. Explore the documentation to see how it works, or get started for free and keep your financial records ready for whatever the IRS sends your way.