W-2 Box 12 codes are one- or two-letter labels an employer puts beside an amount to say what it is. Some codes describe money already counted in Box 1, some send the amount to another form such as Form 8889 or Form 8839, and some are information only. The letter, not the slot, tells you where it goes.
The W-2 Box 12 codes a preparer sees most
The Box 12 codes a preparer sees most often are D, E, W, DD, C and AA. Code D is a 401(k) deferral, E a 403(b) deferral, W an HSA contribution, DD the cost of employer health coverage, C taxable group-term life insurance, and AA a designated Roth 401(k) contribution. Each one is read differently on the return.
The IRS 2026 General Instructions for Forms W-2 and W-3 define every code. They also say the codes "do not relate to where they should be entered in boxes 12a through 12d." An employer that reports only code DD can put it in Box 12a, so a preparer never reads meaning into the slot. Each entry is the code in capital letters to the left of the line and the amount to the right, such as D 5300.00. Copy A carries no more than four entries, so an employee with five or more codes may get a second Form W-2 that holds only the overflow.
Here is what each common code means in practice:
- Code D. Elective deferrals to a 401(k) plan, including a SIMPLE that is part of a 401(k) arrangement. The deferral is left out of Box 1 but stays in Boxes 3 and 5.
- Code E. The same idea for a 403(b) salary reduction agreement, common at schools, hospitals and nonprofits.
- Code AA. Designated Roth contributions to a 401(k). Roth money is taxed now, so the instructions put it in Boxes 1, 3 and 5. Its partners are BB for a 403(b) and EE for a governmental 457(b).
- Code W. Employer contributions to a health savings account, and the instructions say this includes what the employee "elected to contribute using a section 125 (cafeteria) plan." Most employees think of that second part as their own money, but it is reported here.
- Code DD. The cost of employer-sponsored health coverage. The instructions say plainly: "The amount reported with code DD is not taxable."
- Code C. The taxable cost of group-term life insurance over $50,000. It is already inside Boxes 1, 3 and 5.
A catch-up contribution does not get its own code. For an employee aged 50 or older, the instructions say to report regular deferrals and catch-up deferrals "as a single sum" under the same code. A large code D amount on an older client's W-2 is often just that sum.
A year printed after a code is a different signal. The instructions say make-up contributions for military service under USERRA are entered with the year, such as D 24 2250.00. The 2026 Form W-2 employee instructions tell employees to count those amounts "for the year shown, not the current year" when checking for excess deferrals.
Which W-2 Box 12 codes change taxable income?
W-2 Box 12 codes fall into three groups for taxable income. Some report money already inside Box 1, so nothing is added. Some report an amount that feeds another form, which may add income or tax there. The rest are information only and never touch taxable income. Sorting each code into one group before data entry prevents double counting.
Codes already in Box 1 include C, H, V, Z, AA, BB, EE and GG. For these, the W-2 instructions tell the employer to include the amount in Box 1, so entering the Box 1 figure already captures it. Adding the Box 12 amount again would tax it twice. Code H works differently on the return: the amount is in Box 1, and IRS Publication 525 (2025) says the employee may deduct it, with the deduction on Schedule 1, line 24f.
Codes that report amounts left out of Box 1 include D, E, F, G and S (pre-tax deferrals), J (nontaxable sick pay), L (substantiated reimbursements), P (excludable military moving reimbursements), Q (nontaxable combat pay), DD, II and TA. Some of these never matter again. Others, such as Q, come back for a credit calculation.
The 2026 instructions add three codes that tax software and preparers will meet for the first time on W-2s for 2026: TA for employer contributions to a Trump account, TP for total cash tips reported to the employer, and TT for qualified overtime compensation. The 2026 Form W-2 employee instructions say TP and TT amounts are used for the tip and overtime deductions on Schedule 1-A.
Every W-2 Box 12 code with its Box 1 status
This table lists all 33 codes in the 2026 General Instructions for Forms W-2 and W-3, with a short meaning, whether the amount is already in Box 1, and where it goes next. Form 1040 line numbers are from the 2025 Instructions for Form 1040 and can move on a new year's form.
| Code | What it reports | Already in Box 1? | Where it goes next |
|---|---|---|---|
| A | Uncollected social security or RRTA tax on tips | No, it is a tax | Schedule 2, line 13 |
| B | Uncollected Medicare tax on tips | No, it is a tax | Schedule 2, line 13 |
| C | Taxable group-term life insurance over $50,000 | Yes | Nothing further |
| D | 401(k) elective deferrals | No | Deferral limit check |
| E | 403(b) elective deferrals | No | Deferral limit check |
| F | 408(k)(6) salary reduction SEP deferrals | No, except Roth SEP IRA deferrals | Deferral limit check |
| G | 457(b) deferrals and employer contributions | No | Separate 457(b) limit check |
| H | 501(c)(18)(D) plan deferrals | Yes | Schedule 1, line 24f deduction |
| J | Nontaxable sick pay from a third party | No | Information only |
| K | 20% excise tax on excess golden parachute payments | No, it is a tax | Schedule 2, line 17k |
| L | Substantiated business expense reimbursements | No | Information only |
| M | Uncollected social security or RRTA tax on group-term life (former employees) | No, it is a tax | Schedule 2, line 13 |
| N | Uncollected Medicare tax on group-term life (former employees) | No, it is a tax | Schedule 2, line 13 |
| P | Excludable moving reimbursements for Armed Forces or intelligence community | No | Information only |
| Q | Nontaxable combat pay | No | Optional earned income credit election |
| R | Employer contributions to an Archer MSA | No, unless not excludable | Form 8853 |
| S | SIMPLE IRA salary reduction contributions | No, except Roth SIMPLE IRA contributions | Deferral limit check |
| T | Adoption benefits | No | Form 8839, then Form 1040 line 1f |
| V | Spread on exercise of nonstatutory stock options | Yes | Publication 525 |
| W | Employer and cafeteria plan contributions to an HSA | No, unless not excludable | Form 8889, line 9 |
| Y | Section 409A nonqualified plan deferrals | No | Information only; reporting is optional |
| Z | Income from a nonqualified plan failing section 409A | Yes | Schedule 2, line 17h |
| AA | Designated Roth contributions to a 401(k) | Yes | Deferral limit check |
| BB | Designated Roth contributions to a 403(b) | Yes | Deferral limit check |
| DD | Cost of employer-sponsored health coverage | No | Information only |
| EE | Designated Roth contributions to a governmental 457(b) | Yes | Deferral limit check |
| FF | Permitted benefits under a QSEHRA | No | Information only on the W-2 |
| GG | Income from qualified equity grants under section 83(i) | Yes | Nothing further |
| HH | Aggregate section 83(i) deferrals at year end | No | Information only |
| II | Medicaid waiver payments excluded from Box 1 | No | Form 1040 line 1d if elected for earned income |
| TA | Employer contributions to a Trump account | No, if paid under the program | Information only |
| TP | Total cash tips reported to the employer | Yes, reported tips are wages | Schedule 1-A, Part II |
| TT | Total qualified overtime compensation | Yes | Schedule 1-A, Part III |
The instructions skip several letters, including I, O, U and X, so the list jumps from H to J and from Z to AA. If a W-2 shows a code that is not in this table, it is an employer error, and the fix is a corrected form from the employer rather than a guess.
W-2 Box 12 codes that send you to another form
Several W-2 Box 12 codes send the preparer to another form. Code W goes to Form 8889, code T to Form 8839, codes A, B, M and N to Schedule 2 as uncollected tax, and code Q to the earned income credit as an optional election. Each one starts a separate calculation rather than changing wages.
Code W and Form 8889. The Instructions for Form 8889 (2025) say employer contributions, "including employee payroll contributions through a cafeteria plan," go on line 9, and that these "should be shown on Form W-2, box 12, code W." The Form 8889 contribution limit counts the code W amount, so a client who also contributed directly to an HSA needs both numbers on the same form. Why the HSA custodian's 5498-SA total can differ from code W is covered in the post on 5498-SA totals against W-2 Box 12 code W.
Code T and Form 8839. The Instructions for Form 8839 (2025) say "employer-provided adoption benefits should be shown in box 12 of your Form(s) W-2 with code T." The W-2 instructions tell the employer to report all adoption benefits, "including those in excess of" the exclusion. Form 8839 decides how much is excluded, and the 2025 Instructions for Form 1040 carry the taxable part to line 1f.
Codes A, B, M and N on Schedule 2. These are taxes the employer could not collect. The Form 1040 instructions for Schedule 2, line 13 say this tax "should be shown in box 12 of Form W-2 with codes A and B or M and N." A and B relate to tips, M and N to group-term life insurance for former employees. The amounts are tax, not wages, so they never go near Box 1.
Code Q and the earned income credit. Nontaxable combat pay stays out of income. The Form 1040 instructions say a member of the Armed Forces "can elect to include this pay in your earned income when figuring the EIC," and that the amount "should be shown in box 12 of Form(s) W-2 with code Q." Whether to make the election is the preparer's call, made with the client's numbers.
Codes K and Z. Code K is a 20% excise tax that the employer already withheld when the payments were wages, and the Form 1040 instructions point it to Schedule 2, line 17k. Code Z income is already in Box 1, and the same instructions put the additional tax on Schedule 2, line 17h.
Codes TP and TT. These are the newest referrals. The 2026 Form W-2 employee instructions say to use the TP amount "when determining the qualified tip deduction in Part II of Schedule 1-A" and the TT amount for the overtime deduction in Part III. Code TP comes with an occupation code in Box 14b, which the post on W-2 Box 14 entries explains.
How do W-2 Box 12 deferral codes add up across two employers?
W-2 Box 12 deferral codes from two employers are added together, because the elective deferral limit applies to the person, not to each job. The 2026 Form W-2 puts codes D, E, F, S, AA, BB and EE under one overall limit, and code G under its own. A client who changed jobs can exceed it unnoticed.
The 2026 Form W-2 employee instructions say elective deferrals under codes D, E, F and S and designated Roth contributions under AA, BB and EE "under all plans are generally limited to a total of $24,500" for 2026, with lower or higher figures for SIMPLE plans and some 403(b) participants. They add that code G deferrals "are limited to $24,500" and code H deferrals "are limited to $7,000." For 2025 returns, IRS Publication 525 (2025) gives an overall limit of $23,500. Each employer tracks only its own plan, so neither sees the combined total.
A worked two-employer example
This example is fictional. Priya Calder (an example client, age 41) worked for two employers in 2026.
| Employer | Box 12 entries | Counts toward overall limit |
|---|---|---|
| Example Logistics Inc. (Jan to Jun) | D 14000.00, AA 2500.00 | 16,500.00 |
| Example Health Partners (Jul to Dec) | E 9500.00 | 9,500.00 |
| Total | 26,000.00 |
The combined total is $26,000.00 against the $24,500 limit for 2026, so $1,500.00 is over the limit. Neither W-2 shows a problem on its own. The Box 1 figures on both forms already exclude the D and E amounts, because each employer applied its own plan's rules.
Publication 525 says the excess deferral must be included in income "for the year of the deferral," on Form 1040 line 1h, and that a plan may pay the excess back by April 15 of the following year. The 2025 Form 1040 instructions add that any excess attributable to designated Roth contributions, such as the AA amount here, is not added on line 1h, because it is already in Box 1. A returned excess shows up later on Form 1099-R with code 8 or P in the distribution code box, a pairing the post on 1099-R distribution codes explains. How the excess is handled is the preparer's decision; the W-2s only show that the totals need a second look.
Catch-up contributions change the arithmetic for clients aged 50 or older. The W-2 shows the regular and catch-up amounts as one sum, so the client's age decides which limit applies. Publication 525 describes the catch-up rules, including the higher limit for ages 60 through 63 that the 2026 Form W-2 employee instructions mention.
When a client has more than one W-2, line them up side by side before you trust any Box 1 total. The reasons Box 1 sits below the last pay stub's year-to-date gross are covered in the post on W-2 Box 1 versus the final pay stub, so this section stays with the deferral limit itself.
Getting both employers' Box 12 pairs into one sheet is where the work starts. Schema CPA reads W-2s and exports them to Excel or CSV, so the two-employer total is a sum rather than a retyping job. The document types the product reads are listed on the homepage, and how extraction treats Box 12 is in the post on Box 12 codes after W2 OCR.
Treating a W-2 Box 12 code DD amount as wages
Treating a code DD amount as wages is a common Box 12 mistake. Code DD shows the cost of employer-sponsored health coverage, often a large number, and the instructions say it "is not taxable." Adding it to income overstates wages and tax. Several other information-only codes get misread the same way.
Code DD can be large, and on a lower-paid employee's W-2 it can look like a sizable fraction of Box 1. That size makes it look like compensation. It is there so the employee can see what coverage costs. It does not change Box 1, it does not feed another line, and it should not be entered as income anywhere.
Other codes are misread the same way:
- Code J. Nontaxable sick pay. The employee instructions call it "information only, not included in box 1, 3, or 5." Taxable sick pay would already be in Box 1.
- Code L. Substantiated reimbursements. Only the nontaxable part is shown here; any excess is already in Boxes 1, 3 and 5.
- Code P. Excludable moving reimbursements. The employee instructions say they are "not included in box 1, 3, or 5."
- Code FF. The QSEHRA permitted benefit. The W-2 instructions say the employer reports what the employee "is entitled to receive," not what was paid, so it is not a payment total.
- Code HH. Aggregate section 83(i) deferrals at year end, a running balance rather than this year's income.
The opposite mistake happens with codes already inside Box 1. Entering code C, V, Z or AA as an extra income line taxes the same dollars twice. Code C is the usual example, because group-term life coverage feels like a benefit rather than pay. The W-2 instructions say the employer must "also include this amount in boxes 1, 3 (up to the social security wage base), and 5."
A third mistake is reading code W as something the employee already deducted. Cafeteria plan HSA contributions are excluded from Box 1 at the payroll level. Claiming them again as a deduction on Form 8889 would count them twice, which is why the form puts them on line 9 instead.
When a Box 12 entry does not fit any code, or the amount looks wrong, the employer is the only one who can fix it, through a Form W-2c. How W-2 totals tie back to the employer's quarterly returns is a separate check, covered in the post on how to reconcile W-2s to Form 941. To see how Schema CPA handles a folder of client W-2s, get started with a few clients on the Free plan.