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. Common valid pairs you may encounter include 1B (early distribution from a designated Roth account), 2B (early Roth distribution with a verifiable exception), 7B (normal Roth account distribution not yet qualified under the five-year rule), 8J and PJ (excess Roth IRA contributions returned, taxable in the current and prior year respectively). A single 1099-R carries only one combination—if you took multiple types of distributions from the same account, the payer usually issues multiple forms.
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 and when the payer can verify one of these exceptions:
- Rule of 55 – you separated from your employer in or after the year you turned 55 and are taking distributions from that employer's qualified plan (not an IRA). Public-safety employees can use age 50.
- SOSEPP / 72(t) payments – a series of substantially equal periodic payments based on your life expectancy.
- IRS levy on the account.
- Qualified birth or adoption distributions – up to $5,000 per child under the SECURE Act.
- Qualified disaster, terminal illness, or domestic abuse distributions under SECURE 2.0.
Most IRA custodians do not code SOSEPP payments as Code 2 because they have no way to verify the series—expect a Code 1 there and claim the exception yourself on Form 5329.
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.
Fixing a Wrong Code
You have two paths, and the first is cleaner.
Get the payer to issue a corrected 1099-R. Call the institution's tax-reporting department—not general customer service—and explain specifically what the correct code should be and why, with your distribution paperwork and dates in hand. If they agree, they issue a form with the "CORRECTED" box checked, and the IRS database is updated to match. Aim to do this well before April 15; corrected forms that arrive after filing can force an amended return.
Override on your own return. When the payer refuses or cannot help in time, you can still claim the correct treatment:
- For penalty exceptions, file Form 5329 with the appropriate exception code on line 2.
- For a rollover that was not coded as one, report the gross distribution on line 4a or 5a of Form 1040 and enter $0 (or the non-rolled portion) as the taxable amount on line 4b or 5b, writing "Rollover" next to it.
- For a 1099-R you believe is materially wrong and the issuer will not correct, Form 4852 (the substitute form) lets you file with the figures you believe are correct. Document everything—you may need it later.
Form 5329 exception codes worth remembering:
- 01 – separation from service after age 55 (qualified plans)
- 02 – substantially equal periodic payments under §72(t)
- 03 – total and permanent disability
- 04 – death of the plan participant or IRA owner
- 05 – unreimbursed medical expenses above 7.5% of AGI
- 06 – Qualified Domestic Relations Order (QDRO)
- 08 – higher education expenses
- 09 – first-time home purchase (up to $10,000 lifetime, IRA only)
- 12 – other (covers many SECURE 2.0 exceptions; see the instructions)
One caution on tax software: consumer programs key heavily off Box 7. Import a Code 1 and the software assumes the 10% penalty until you file Form 5329; import a Code G with a non-zero Box 2a and it treats the difference as taxable even though most direct rollovers should show $0. Review every imported form, and reconcile to Form 1040 lines 4a/4b and 5a/5b before filing—the "a" lines show gross, the "b" lines show taxable, and they should differ by the amount of any rollover or non-taxable Roth distribution.
Special Situations Worth Watching
QDRO distributions to a former spouse. The plan should issue the 1099-R to the alternate payee—the ex-spouse who received the money—with Code 2 if they are under 59½. If the employee-spouse receives a 1099-R for a QDRO payment that went to the ex, that is a coding error worth fixing.
Backdoor Roth conversions. A traditional-to-Roth conversion shows Code 2 (under 59½) or Code 7 (59½ and over). The conversion is taxable to the extent of pre-tax dollars across all your IRAs—the pro-rata rule on Form 8606 determines the actual taxable amount, not Box 2a alone.
Missed RMDs, corrected late. A makeup RMD gets the normal code (typically 7) for the year it is actually paid, not the year it was due. You may still owe the 25% missed-RMD excise tax (reduced from 50% under SECURE 2.0), calculated separately in Part IX of Form 5329.
Inherited IRAs. A death distribution (Code 4) carries no early-withdrawal penalty regardless of the beneficiary's age. Spouse beneficiaries can roll an inherited IRA into their own; non-spouse beneficiaries are generally bound by the SECURE Act 10-year rule, and a subsequent distribution from the account is coded based on their own age and circumstances.
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.