Tax Center

How to File Kalshi Taxes (2026)

By Owen Monagan · · Updated

Kalshi issues no Form 1099-B for your trades and reports no profit or loss to the IRS. It does give you a realized profit-and-loss figure and a per-position export, but that covers closed positions only, so under a marking regime the number that decides your year is still one you build yourself. This guide covers what arrives, what does not, how to reconstruct the rest, and where it lands on a return.

It is a record-keeping and operational guide, not tax advice. How prediction-market event contracts should be characterized is genuinely unsettled, and that decision belongs to you and your tax professional. Federal only.

The whole job, before any of the detail

  1. Download the export and read what it actually is: one row per closed position, and nothing at all about what you still hold.
  2. Decide the characterization with a preparer. None of the four candidates is an election, so this is a decision about what the contracts are, taken once, rather than a choice you make each April.
  3. If you file as capital, filter the export down to trades, derive proceeds and basis from the price and quantity columns, split by holding period, and total each part onto Form 8949 and Schedule D.
  4. If you file under Section 1256, you also need the one thing no export contains: every position still open on December 31, and a closing price for each. That is what forces the API.
  5. Assemble Form 6781 Part I, which nets the year and splits it 40% short-term, 60% long-term regardless of how long you held anything.
  6. Reconcile against Kalshi's own figure before you sign. If your arithmetic does not reproduce theirs, one of you is wrong and it is cheaper to find out now.

Steps 3 and 4 are the two this guide teaches end to end. The other two routes are covered in the guides that do them properly, linked where they come up.

What tax forms does Kalshi send you?

Open your account documents page before you read any further, because the rest of this guide is about something you can verify in thirty seconds.

Two different things live on that page, and conflating them is where most confusion starts.

The tax forms. Kalshi issues these only to users who cross IRS reporting thresholds, so depending on your year you may receive none of them:

  • 1099-INT, interest paid on your cash balance
  • 1099-MISC, credits and rewards, which the account page says explicitly "does not include profits/losses"
  • 1099-B, and read this one carefully: Kalshi's help center describes it as "transaction proceeds from broker transactions (crypto transfers)". It covers moving crypto in and out, not trading contracts.
  • 1099-DA, digital asset transaction reporting, issued through ZeroHash

Worth knowing that the account page and the help center do not list quite the same set: the account page omits the 1099-B. Read your own account rather than either list. Forms arrive electronically through Zenwork, Kalshi's form provider, so check spam if you are expecting one.

These are the easy half. They carry a figure somebody else computed, and every mainstream preparer and filing service knows what to do with them. Hand them over and they are handled.

The figures and the export. The same page shows a Total P&L with fees and without, a per-year table, and a download in the Transactions column. That download is a zip containing a single file named realized_pnl_<start>_<end>.csv, one row per closed position with entry and exit prices and fees split across the open and the close.

So Kalshi is not withholding your numbers. It tells you, in its own words, that this is "not tax advice", and that the P&L shown is "realized profit and loss from your closed positions, including fees and any credits or rebates you've received". Two operational details from its help center are worth having: the figures are computed first in, first out, and they refresh on the first morning of each month, so a mid-month check will not show your recent trades.

What is missing from Kalshi's numbers?

Not information. A form, an IRS filing, and your open positions.

No 1099-B for your trades. Kalshi does issue a 1099-B, but its help center defines it as covering crypto transfers, and the account page states plainly that Kalshi "does not report profits/losses to the IRS". Every other investment account you own works the other way: the institution computes your trading figure, files it, and sends you a copy. Here the reporting obligation lands on you alone, and nothing you file will be cross-checked against a statement, because for your contracts no statement exists.

That has a concrete consequence later on this page. Line 1 of Form 6781 Part I is where a broker's aggregate figure would go, copied from box 11 of a Form 1099-B. There is no box 11 to copy. The form anticipates this: its instructions say to list separately each transaction for which you did not receive a Form 1099-B, which here means all of them.

No open positions. This is the gap that actually costs money. The export is realized P&L on closed positions, which is what the filename says. If you are filing under a regime that marks open positions at year end, and Section 1256 does, then the one set of numbers you need is the one set Kalshi does not give you. A year where you opened a large position and closed nothing produces an export that looks almost empty and a tax figure that is not.

And their number is not your number. The headline P&L includes credits and rebates, which are not trading results. In the export they appear as their own rows, typed credit rather than trade, so you can separate them, but only if you know to look.

So the important half of the return is yours to build. The rest of this guide is how.

What are the four ways to file Kalshi trades?

Before you can compute anything you have to know which regime you are computing under, because the four candidates produce genuinely different numbers from identical trades. Each has a real case, and the honest position is that people are filing all four today.

This guide then teaches two of them end to end: plain capital, and Section 1256. Wagering is left to the two guides that already cover it properly, because the itemizing rules and the 90% limit are a subject of their own and doing them justice here would bury everything else. Ordinary income is left because there is nothing to teach: it is a single line and no netting regime. The two that remain are the two where the work is real and where getting the arithmetic right actually changes your bill.

1. Wagering, under §165(d)

The case for it. It is what the activity looks like to anyone who is not a tax lawyer. You are picking outcomes on sports and elections, and in August 2026 the Ninth Circuit said of these exact contracts that they "are sports bets". If the IRS ever asserts a position, this is the one it is likeliest to assert, and a filer already here has nothing to unwind.

The case against it. It is also the characterization the instrument is built to deny. Most people assume these are bets and should be taxed as bets, but the reason Kalshi can offer them nationwide is the opposite claim: that they are Commodity Exchange Act derivatives on a federally designated contract market under CFTC oversight, and so not wagers reachable by state gambling law. That is a regulatory characterization rather than a tax holding, and no court has carried it across to §165(d). It is why the question is open rather than merely uncomfortable: the thing you are filing rests, for its own legality, on not being a bet.

What it costs, and where to read the mechanics. Winnings are reported at gross on Schedule 1 and losses come off only on Schedule A, so if you take the standard deduction, as most filers do, a losing year deducts nothing however large it was (IRS Topic No. 419). Nothing carries forward, and from tax years beginning after December 31, 2025 only 90% of losses count at all. The itemizing arithmetic and that 90% limit are covered properly in are prediction markets taxed as gambling and the OBBBA 90% loss limit; this guide does not teach filing under it.

2. Ordinary income

The case for it. If you think these contracts are neither wagers nor property, what is left is simply money you made, reported and taxed. It is the fallback position, and it is the one that asks the least of you.

What it costs. Net profit goes on Schedule 1 as other income, and that is the whole mechanism: no form, no schedule, no netting. Full ordinary rates on every dollar of a good year with no preferential rate available, and nothing at all for a bad one, since a loss is neither deductible against other income nor carried forward. It is the worst of both the other treatments unless Kalshi is literally your job, in which case you are in Schedule C territory and should read the professional note below.

3. Capital

The case for it. The contracts are property you bought and sold hoping the price moved. That is the ordinary meaning of a capital asset, and reaching it requires no argument about Section 1256 at all. This is the conservative route that still gets you the machinery that matters.

How you file it. Each disposition on Form 8949, totals to Schedule D, short or long term by how long you actually held.

What it gets you. Losses offset capital gains without limit, then up to $3,000 of ordinary income a year under §1211(b) ($1,500 filing separately), and the remainder carries forward indefinitely under §1212(b) with its character preserved. Critically, this is not an itemized deduction: it comes off in arriving at AGI under §62(a)(3), so the standard deduction does not touch it. Nothing is marked at year end.

4. Section 1256

The case for it. Kalshi has been a CFTC-designated contract market since 2020, which makes it a qualified board or exchange by the plain words of §1256(g)(7)(B). Contracts on such a venue are exactly what the section was written for.

How you file it. Form 6781, Part I, covered in detail below. The net splits 40% short-term to Schedule D line 4 and 60% long-term to line 11.

What it gets you. The same loss machinery as capital treatment, plus two things it does not have: 60% of any gain taxed at long-term rates under §1256(a)(3) no matter how briefly you held, and a three-year carryback of a net loss under §1212(c), against prior-year Section 1256 gains only.

What it costs. Positions open at year end are treated as sold on the last business day under §1256(a)(1), which is a cost as often as a benefit, and it is the most contested of the four.

Which treatment leaves you with the most money?

Rank them by what you keep and the answer changes by person. This is the part generic write-ups get wrong: Section 1256 is not simply best. Read what follows as what is at stake under each route, not as a menu you pick from each April. The section after it explains why that distinction matters more than the ranking does.

If you areBestWorstWhat decides it
Down on the year, no other capital gains, standard deductionCapital ≈ §1256Wagering, at exactly $0Both capital routes give you $3,000 a year and an indefinite carryforward without itemizing. §1256 buys you almost nothing extra here, so the aggressive position earns little.
Down, with capital gains elsewhere§1256, then capitalWageringCapital losses offset those gains without limit. Wagering losses cannot touch them at all.
Down less than $3,000 for the yearCapital = §1256, identicallyWageringBelow the §1211(b) cap the two produce the same number to the cent. Taking the contested position buys nothing.
Up, holding briefly§1256, clearlyWagering60/40 applies regardless of holding period, so a position held a day gets long-term rates on most of it. Everything else taxes a short hold at ordinary rates.
Up big, high bracket§1256, by the widest marginWagering, by the widest margin60% at long-term rates against 37% ordinary is roughly ten points of blended rate. Wagering taxes the gross.
Holding a large unrealized gain on 31 DecemberCapital§1256This is the one that flips, on timing rather than on total tax: §1256 marks the position and taxes the gain a year before you sell, and the mark then becomes your basis. Capital treatment taxes nothing until you close.
Genuinely in the business of gamblingSchedule Cn/aAbove the line, no itemizing needed, but the §165(d) cap and the 90% limit still apply and §165(d)(2) pulls your expenses inside them. The bar is high.

Two patterns worth taking away. Wagering is worst in every row but one, and the one exception is the person who is in the trade or business, which is almost nobody. And §1256 is not a free upgrade over plain capital: it wins clearly for winners and for anyone with gains elsewhere, ties for small losers, and pulls tax forward a year for someone sitting on an unrealized gain at 31 December.

Read that last row as a timing cost inside one consistent position, not as a reason to leave it for a year. The mark becomes your basis, so the gain it accelerates is not taxed again when you finally close; you paid it early, not twice. Until there is guidance, the characterization you file under has to hold across good years and bad, which is the subject of the next section, and a table of outcomes is the worst possible reason to move between them.

Why does consistency matter more than the ranking?

Here is the thing the table above can mislead you into. None of these is an election.

Section 1256 is not something you opt into. §1256(a) says each Section 1256 contract held at the close of the year "shall be treated as sold". If it applies to an instrument it applies, and if it does not, nothing you tick on a form makes it. The same is true of the other three: whether a contract is a wagering transaction or a capital asset is a question about what the thing is, and the answer does not change because your year went well or badly. The only genuine elections on Form 6781 are the straddle ones and the Box D carryback.

So the practical question is not "which do I pick this year". It is "what do I believe these contracts are", decided once with a preparer, and then applied every year including the years it does you no good.

The asymmetry makes that cheap, and it is the argument for settling on Section 1256 early. Look back at the first and third rows of the table. For someone down on the year, especially under the $3,000 cap, Section 1256 and plain capital produce nearly or exactly the same number. Filing Section 1256 in a losing year therefore costs you close to nothing. The value shows up in the year you are up, and that is precisely the year you would otherwise be tempted to switch into it.

That switch is the pattern worth avoiding. Same venue, same contracts, same facts, a different characterization, and the change happens to arrive in the year it saves you money. Nobody needs a special rule to find that interesting. A filer who has reported Section 1256 consistently since they started, through the losing years, is making a claim about what the instrument is. A filer who discovers Section 1256 the year they made $80,000 is making a claim about their tax bill.

None of this is an argument for taking an aggressive position you do not believe. It is an argument for deciding the question on its merits, before the outcome of the year is known, and then not revisiting it because the outcome changed. If you have already filed prior years a different way and now think that was wrong, that is an amendment question rather than a fresh-start question, and it is covered in how to amend a tax return for Kalshi losses.

We do not re-argue the characterization here. The case sits in are prediction markets taxed as gambling, the 90% limit in the OBBBA gambling-loss limit, and the 60/40 and marking mechanics in the Section 1256 60/40 guide.

How do you file it as capital gains?

This is the shorter of the two, because the export already holds almost everything it needs. Every row in realized_pnl_<start>_<end>.csv is a closed position, and a closed position is a disposition: a thing you bought, a thing you sold, a date at each end. That is the whole shape of Form 8949.

What is actually in the file

Thirteen columns, and only some of them do any work here:

ColumnWhat it is for
typetrade or credit. The filter that has to run first.
market_ticker, sideWhich contract, and which side of it you held.
quantity_fpContracts. Fractional, which is what the _fp is warning you.
entry_price_dollars, exit_price_dollarsThe two prices, both from your side's point of view.
open_fees_dollars, close_fees_dollarsFees, split across the two ends of the position.
open_timestamp, close_timestampThe two dates Form 8949 asks for, and the holding period.
realized_pnl_without_fees_dollars, ..._with_fees_dollarsKalshi's own answer. Worth checking yours against, not filing.
subtrader_idAn account identifier. Nothing to do with your return.

Notice what is missing. There is no proceeds column and no basis column, and those are the two numbers Form 8949 is actually asking for.

Four steps, in order

Drop everything that is not a trade. The type column separates them. A credit row is a promotion or a rebate, arrives with no ticker, no side and no quantity, and is not the sale of anything, so it has no business on Form 8949. It still sits in the same profit-and-loss columns as your real dispositions, which is exactly how it ends up in a total that should not contain it.

Derive proceeds and basis, because the file does not state them. It gives you a net result per row and leaves the two numbers the form actually asks for to you:

proceeds = quantity_fp x exit_price_dollars
basis    = quantity_fp x entry_price_dollars

This holds for the NO side too, with no sign flip, because Kalshi states both prices from the holder's point of view: a NO position is a long position in the NO contract. Check your own file the way you would check any arithmetic you are about to sign: proceeds - basis should reproduce realized_pnl_without_fees_dollars on every row.

The reason this step matters more than it looks: the IRS matches on proceeds, not on your net. A filer who copies the profit-and-loss column into the gain column and leaves columns (d) and (e) empty has reported the right bottom line on a form that does not foot.

Split by holding period. Subtract open_timestamp from close_timestamp. More than one year is long-term and goes in Part II; one year or less is short-term and goes in Part I. Expect almost all of it, and quite possibly all of it, to land in Part I, for reasons covered below.

Total each part and carry it to Schedule D. Part I totals to Schedule D line 1b or line 3, Part II to line 8b or line 10, and the two net against each other there.

The boxes, and why they are the ones they are

Form 8949 opens by asking which box to check, and the answer follows directly from the fact this whole guide is about. Box A and Box B are for transactions reported to you on a Form 1099-B, with basis reported or not. You did not receive one. So short-term dispositions are Box C, defined as transactions "for which you can't check box A, B, G or H because you didn't receive a Form 1099-B or Form 1099-DA (or substitute statement)", and long-term ones are Box F, its Part II twin.

It is the same fact as the empty line 1 on Form 6781, surfacing somewhere else on a different form. If a 1099-DA did arrive, read it before assuming it changes the answer: Kalshi's is for digital-asset transfers, not for your contract trades, and the form has its own box on 8949 rather than sharing Box C.

Part II is empty, and that is the normal result

Every one of those 108 dispositions is short-term. The longest hold in the year was twenty-nine days and most opened and closed the same afternoon, which is what event contracts do: they resolve on an event, and the event happens. Expect your own Part II to be empty too.

A long-term row is possible, but it can only come from a position you opened in a previous calendar year and closed in this one. Watch for it deliberately, because the export is keyed on the date you closed: a contract bought in November 2025 and settled in 2026 appears in your 2026 file with an open_timestamp that predates the window you asked for. It is the one row whose dates look wrong and are not, and it is the only row that belongs in Part II under Box F.

Schedule D takes it from there. This year is a net short-term capital loss of $53.04, which under §1211(b) comes off ordinary income in full, being well under the $3,000 annual limit, with nothing left to carry forward under §1212(b). No itemizing, and the standard deduction does not touch it. A bigger year works the same way: deduct $3,000, carry the rest forward indefinitely with its short-term character intact.

What the export will not do for you

Fees are a decision, not a given. The file splits them across open_fees_dollars and close_fees_dollars and reports the result both with and without. The ordinary convention is to add the opening fee to basis and net the closing fee out of proceeds. Settlement is free on Kalshi, so most rows carry a fee only at the open; the rows with a closing fee are the ones you exited early, which is a useful way to spot them.

Quantities are fractional. Most rows are not whole contracts, which is what the _fp in quantity_fp is telling you. Round the totals, never the rows: rounding 108 rows to the cent and then adding them up does not reliably give you the same answer as adding them up and rounding once.

Nothing here flags a wash sale, and whether the wash-sale rule reaches event contracts at all is an open question, not a settled no. If you closed a market at a loss and were back in the same market shortly after, raise it with your preparer rather than resolving it from the export.

What is mark-to-market, and why does Section 1256 need it?

Everything above counted what you closed. Section 1256 also counts what you were still holding, and that single difference is why this route takes real work while the capital route mostly takes arithmetic. It also makes the holding-period split you just did irrelevant: under Section 1256 the 60/40 character is fixed by statute regardless of how long anything was held, so the dates stop deciding anything and the December price starts.

§1256(a)(1) treats a contract held at the close of the tax year as sold at fair market value on the last business day of that year. The position is not closed and you have not received anything, but the gain or loss to that point is recognized anyway, and the position picks up a new basis at that marked value going into the next year.

Applied here, that produces a result people find genuinely surprising. Buy a contract on a Super Bowl market in September and hold it through year end, and the position is marked at the close of that year and lands on that year's return, months before the game is played and before anyone knows whether you were right. A year in which you opened a large position and resolved nothing can still produce a number.

Note the statute says last business day, not December 31. For an instrument that trades on a traditional exchange calendar those are the same day or a few days apart and the answer is obvious. For a venue that quotes continuously, including weekends and holidays, which day counts as the last business day is not something the text resolves, and there is no regulation or ruling construing it for this kind of market. If December 31 falls on a weekend, that is a question worth putting to your preparer rather than assuming.

The mark has to come from somewhere, and for Kalshi that somewhere is the daily candle for the market: Get Market Candlesticks takes a period length in minutes, and 1440 is the daily bar. Two traps sit in that lookup, and both are the kind that produce a plausible wrong answer rather than an error:

  • The daily candle closes at Eastern midnight, not UTC midnight. Whichever day you settle on, the candle carrying that day's trading is stamped the following day at 05:00Z in winter, 04:00Z in summer. Read that timestamp as a UTC date and you will name the wrong day, and the row you have just mispriced is a mark that goes on a return.
  • Candles migrate to an archived tier once a market is old enough, with a different response shape from the live one. A live market returns 404 on the archived path and an archived market returns 404 on the live path, so a lookup that only knows one of them fails on roughly half your history.

There is also a case with no clean answer: a market that published no close on the relevant day. There is no defensible mark for that position. The honest treatment is to leave it visibly unpriced and say so, rather than substituting cost or the last trade and letting an invented number pass as a computed one.

Which is where the export runs out. It is realized profit and loss on closed positions, and a mark needs the opposite: the positions that were still open on December 31, and a price for each of them on that day. Neither exists in any file Kalshi will hand you, and no amount of care with the CSV produces them. That is the whole reason the rest of this guide is about the API.

How do you get a complete Kalshi trade history?

This is the step that goes wrong most often, and it goes wrong silently.

Kalshi serves a member's fills from two disjoint endpoints, and says so itself. The Get Fills reference states that "fills that occurred before the historical cutoff are only available via GET /historical/fills". The Historical Data page gives the mechanism: the live tier targets a three-month window, the boundary is a set of cutoff timestamps you can read from GET /historical/cutoff, and those timestamps advance over time. For fills the governing field is trades_created_ts.

Passing min_ts=0 to the live endpoint does not reach back past the cutoff. It returns what the live tier holds and nothing else, with no error and no indication that anything is missing. Kalshi's own migration guide names the remedy, and names our exact use case while doing it: "for use cases like building a complete fill history, query both the live and historical endpoints and merge the results".

A tax year is twelve months and the live window is three, so any honest reconstruction has to read both. On one real account we measured 98 fills in the live tier against 47 in the archive that a single-endpoint pull never sees. That is not a rounding difference. Worse, the fills that fall through the gap are the oldest ones, which are disproportionately the opening legs of positions still held, so the trades you lose are the ones carrying cost basis. Six open positions on that account existed only in the archive, which meant that reading one endpoint produced positions with proceeds and no basis at all.

The tell, if you want to check work you have already done: a market that shows a settlement but no fills. The settlement survived and the opening trade did not.

There is a second version of the same trap over longer timescales. If you stop pulling for longer than the live window, fills recorded during the outage cross the cutoff and become reachable from neither endpoint on a naive incremental sync. Anything keying off "the last fill I saw" has to compare against the current cutoff rather than against its own high-water mark.

None of this is exotic. It is the ordinary consequence of a two-tier storage design that the API documents but does not warn you about, and it is the single most likely reason a hand-built Kalshi figure is wrong.

How do you pull a full year from the Kalshi API?

This section is for readers who will write the code. If you are not, skip to Form 6781 below; nothing here changes the earlier sections.

Kalshi authenticates with an API key ID and an RSA private key, signing each request. Two practical points before any code, both from the account side:

  • Keys can only be created on desktop. The mobile app has no settings surface for them.
  • Keys default to full access, read and write. Read-only is a scope you have to select when creating the key. Nothing about a key is inherently restricted, so if you only intend to read, set that explicitly rather than assuming it.

Leave the optional public-key field empty when creating the key and Kalshi generates the pair for you. It shows the private key once and never again.

Signing

Build the string from the millisecond timestamp, the HTTP method and the request path, then sign it with RSA-PSS over SHA-256 with the salt length equal to the digest length, base64 the result, and send it with the key ID and the timestamp in the three KALSHI-ACCESS-* headers. Two details in that sentence cause almost every valid-looking 401:

  1. Sign the full path including the API prefix (/trade-api/v2/portfolio/fills), not the endpoint fragment.
  2. Exclude the query string from the signed path, while still sending it on the request URL.

Sign as late as possible, too. The timestamp is inside the signature, so if you pace requests after stamping them you hand the venue a signature that has already aged.

Pagination

Every list endpoint is cursor-based: read the cursor off the response, pass it back, stop on an empty one. Limits run 1 to 1000 and the default is 100.

Rate limits

Kalshi meters in tokens rather than requests, and publishes the budgets. The entry tier carries 200 tokens a second in its read bucket against a default cost of 10 per request, so the sustained ceiling is about 20 reads a second. A cursor walk issues requests back to back, which means a single connection on a fast link crosses that line by itself with no concurrency at all. Two details that matter when you hit it: a 429 carries no Retry-After header and there is no cooldown, so back off on your own clock; and reads and writes draw on separate buckets, which for a tax pull means you are only ever spending the read one.

Direction

Use outcome_side, which describes the exposure a fill leaves you holding. Kalshi's order direction page calls it "the canonical way to determine direction going forward" and marks the legacy action and side fields deprecated. The reason they break for tax purposes is in its own equivalence table: buy-yes and sell-no produce the same exposure, so action alone does not tell you what a fill did to your position. Key disposals off it and you drop closing sales, leave sold positions apparently open, and date disposals at settlement rather than at the trade.

Precision

Per the fixed-point page, prices are fixed-point dollar strings carrying up to four decimal places and contract quantities carry up to two. So quantities really are fractional and a whole-cent field cannot represent a deci-cent market. Carry the finer-grained fields and round once, at the end, on the difference.

One number will not reconcile, by design

If the account ever received a promotional credit, your computed figure will disagree with the headline Kalshi shows. No API endpoint reconstructs credits; the only surface that states them is the member's own CSV export from the documents page. On a test account we computed $181.92 against Kalshi's $181.93 for the same trades, both against a displayed headline of $171.93 carrying a $10 credit. Compare against the fee-inclusive trading column, not the headline.

A useful independent check: trading profit and loss is fully reconstructible from /historical/positions for the pre-cutoff period, per market, as realized profit and loss less fees paid, plus /portfolio/settlements after it. If your fill-derived figure and that one disagree, the fill history is the thing to suspect first.

What does a full Section 1256 year look like?

You now have the two things the export could not give you: every position that closed during the year, and every position that was still open on December 31 with a price for each. This is what they turn into, if Section 1256 applies.

The figures below are worked cases rather than a real account, and they are the same cases our own engine is tested against, which is why they are the ones we are willing to publish. They are small on purpose so the arithmetic stays visible.

A position that spans a year end

This is the case that surprises people, and it is the one the marking rule exists for.

You buy 1,000 YES contracts at $0.30 on November 3, 2025. Cost, $300.00. The market does not resolve in 2025, and on December 31 the venue's close for it is $0.18.

Dec 31, 2025  deemed sale           1,000 x 0.18 = 180.00
              less basis                          300.00
              year 1 result                      (120.00)

Jan 1, 2026   deemed repurchase at the same price, 180.00, which is now your basis

Feb 9, 2026   resolves YES          1,000 x 1.00 = 1,000.00
              less basis                           180.00
              year 2 result                        820.00

Nothing was bought or sold on either December 31 or January 1. The pair is a bookkeeping device for what §1256(a)(1) and §1256(a)(2) require: recognize the move to year end now, and carry the marked value forward as the new basis.

Check it across the two years, because that check is the whole point. Year 1's ($120.00) plus year 2's $820.00 is $700.00, and the true economic result of the position is $1.00 less $0.30 on 1,000 contracts, which is also $700.00. The mark pulled $120 of it into an earlier year. It did not create any.

That is the concrete version of a claim made several times above: under Section 1256 the year-end mark is timing, not extra tax. Get the basis reset wrong and you pay on that $120 twice.

The year, assembled

A 2026 return with one of each kind of position. The middle row is the position from the example above, arriving in its second year.

PositionBasisProceeds or markResult on this return
Closed during 2026100.0040.00 closed(60.00)
Carried in on last year's mark180.001,000.00 closed820.00
Open on Dec 31, 2026, marked50.0020.00 mark(30.00)
Line 2, column (b) total90.00
Line 2, column (c) total820.00
Line 3, the net730.00
Line 7, after lines 4 to 6730.00
Line 8, 40% short-term292.00
Line 9, 60% long-term438.00

The three positions are the line 1 rows themselves, since with no Form 1099-B to copy from the instructions have you list each transaction separately. Line 2 is where each column is added up, and line 3 is where the two columns finally meet.

Line 7 repeats line 3 here only because there is nothing in between: no Form 1099-B adjustment on line 4 and no carryback election on line 6. The 40/60 split is always taken from line 7, not from line 3, and the two come apart the moment either of those lines carries a figure.

Four more things in that table are doing work:

  • Losses and gains travel in different columns until line 3. The two losses land in column (b) and total 90.00; the gain sits in column (c) at 820.00. Nothing nets until line 3, which is why a year that feels like a small net loss can still show a large gain figure on the way there.
  • The marked position is a real number on a real return even though you still hold it and have received nothing. That is the $30.00 loss in the third row, and under plain capital treatment it would be zero.
  • The carried position is priced off 180.00, not off its original $300.00 cost. Using the original cost here is the single most expensive mistake available on this form, and nothing in any export flags it, because the export does not know last year's mark happened.
  • The 40/60 split ignores how long anything was held, per §1256(a)(3). The closed position in row one might have been held an afternoon and the carried one fifteen months; neither fact appears anywhere in the arithmetic. Where the split does not divide cleanly, round one piece and take the other as the remainder rather than rounding both independently, so the two always sum back to line 7 with no stranded cent.

How do you put it on Form 6781?

If you land on Section 1256, the year goes on Form 6781 Part I, and the totals flow from there to Schedule D as 40% short-term and 60% long-term.

Line 1 takes your contracts, and because no 1099-B arrived you list them yourself rather than copying a broker's total. What goes into it is two terms, not three:

line 1 = every position closed during the year: proceeds less basis, less fees
       + every position still open on Dec 31: Dec 31 price x quantity, less basis

A position carried in from last year is not a third term, and that is the part people get wrong. It was deemed sold on December 31 at that day's close and rebought at the same price opening January 1, so its cost this year is last year's mark. The prior year's mark is already inside that figure, and subtracting it again counts it twice.

Those two terms are what any working paper behind this line has to show, because they are the only two things that produce it.

The form itself

A note on how the statute actually words this, because the shorthand everyone uses is loose. §1256(a)(2) does not adjust your basis; it says "proper adjustment shall be made in the amount of any gain or loss subsequently realized" for what paragraph (1) already took into account. The arithmetic comes out the same, which is why "the mark becomes your basis" is the useful way to hold it, but the mechanism is an adjustment to the later gain rather than a change to what you paid.

Two things about the line itself, both easy to miss on a form you are seeing for the first time. Column (a) is captioned Identification of account. Where a broker did send a Form 1099-B, the instructions have you write "Form 1099-B" and the broker's name there and carry across the single figure from its box 11; where none arrived, they have you list each transaction separately instead. And columns (b) and (c) are separate loss and gain columns, so losses and gains stay apart all the way down to line 3 rather than canceling as you go.

Lines 2 and 3 subtotal and net it. Line 4 is a different thing that catches people out, because it is captioned as a Form 1099-B adjustment: it is for straddle and hedging adjustments, not for a missing broker total, so leave it alone unless you actually have one. Lines 8 and 9 split the net 40/60, and those go to Schedule D lines 4 and 11 respectively. Line numbering moves between revisions, so work from the current form rather than from a guide.

Box D is the §1212(c) carryback election: you check it and enter the amount on line 6, then file Form 1045 or amended returns with an amended Form 6781 and Schedule D for each year reached. It carries a net Section 1256 loss back three years against prior-year Section 1256 gains only.

Read that limit precisely before dismissing it, because it is narrower than it sounds in one way and wider in another. §1212(c) measures the prior year by "taking into account only gains and losses from Section 1256 contracts", which is a question about the instruments, not about where you traded them. A profitable year in index options or futures inside the last three can absorb this year's event-contract loss even if every Kalshi year you have ever had was a losing one. With no prior Section 1256 gain of any kind, the election is worth nothing, and that is the common case for someone whose only contracts are event contracts.

Two further limits worth knowing before you count on it. The amount a year can absorb is also capped by that year's total capital gain net income, so large capital losses elsewhere in the carryback year shrink what it can take. And the loss goes to the earliest of the three years first, with only the excess moving forward to the other two. The mechanics, and when it is worth making, are in how to amend a tax return for Kalshi losses.

Parts II and III are almost certainly not yours, and it is worth knowing why rather than wondering. Part II is straddles: offsetting positions held so that one leg's loss is cushioned by the other's gain, listed individually with their components. Part III is captioned Unrecognized Gains From Positions Held on Last Day of Tax Year, it is a memo entry that feeds no other line, and its columns want the fair market value of a position you were still holding against your basis in it.

The reason a Section 1256 filer leaves Part III empty is the marking itself. Every position you held on December 31 was deemed sold at that day's price and its gain or loss recognized on line 1, so there is no unrecognized gain left on it to report. The exception is a position the venue published no price for: it was never marked, so it was never recognized either, and it is worth naming to your preparer rather than quietly leaving off two parts of the form at once.

What this guide deliberately does not compute for you is Schedule D and the capital loss carryover worksheet. Both net your contract results against capital activity elsewhere in your return that nothing here can see, so a version produced from Kalshi data alone would be incomplete by construction, and incomplete in a direction that looks finished.

What else belongs on the same Form 6781?

One more thing about that form, and it is the thing most likely to be missed by anyone who trades more than event contracts: Form 6781 is per return, not per account and not per venue. Column (a) of line 1 asks you to identify accounts precisely because it expects there to be more than one.

Section 1256 is a definition about instruments, not about where you traded them. §1256(b)(1) names five kinds: regulated futures contracts, foreign currency contracts, nonequity options, dealer equity options and dealer securities futures contracts. The exclusions that follow at §1256(b)(2) are where the argument about event contracts actually lives, and that argument is in the Section 1256 60/40 guide rather than here.

The kind that catches ordinary investors is nonequity options. Listed broad-based index options, SPX and NDX among them, are Section 1256 contracts, and unless you are a registered options dealer your options on individual stocks are not. A lot of people hold the first sort without ever having heard of this form.

If you do hold others, the asymmetry this whole guide is about turns into two different kinds of row on one line 1. A futures or index-options broker sends a Form 1099-B carrying box 11, "Aggregate profit or (loss) on contracts", and you write "Form 1099-B" and the broker's name in column (a) and carry that single figure across. Kalshi sends no box 11, so its row is one you built yourself.

They then net, at line 3, and split 40/60 together. A loss on event contracts meets a gain on index options there. It is also why the carryback election above reaches further than people assume, since the prior-year gain it looks for is a Section 1256 gain from anywhere.

Two limits on that netting, and they matter more than the netting itself:

  • It only works inside one treatment. Both sides net because both are being filed as Section 1256. A leg characterized as wagering does not net against a capital or Section 1256 leg at all, which is the trap set out in arbitrage betting taxes.
  • Consistency is per instrument, not blanket. Filing event contracts under Section 1256 commits you to nothing about the rest of what you hold, and it does not follow that two venues offering superficially similar contracts reach the same answer. A venue's regulatory status is part of the facts, not a detail around them.

How Realize helps

Of the four routes above, Section 1256 is the one with real work in it, and that work is what Realize does. Wagering and ordinary income need a single figure. Capital treatment needs every disposition. Section 1256 needs every disposition plus a complete history that does not silently truncate, plus a defensible mark on every position open at year end. Those last two are the parts that go wrong by hand, and they are the parts the product exists to remove.

Concretely: we connect to Kalshi read-only with an API key you create, pull the raw fills from both the live and archived tiers so the year is complete, rebuild cost basis by matching closing fills against opening ones, compute year-end marks from published closes, and produce the Form 6781 Part I figures and a transaction statement behind them. The work this page describes is the work the product does, which is why we can describe it in this much detail.

Being exact about what is and is not shipped: what runs in production today is an on-screen estimate, showing your net figure, the 60/40 split, what a loss year is worth, the carryback and carryforward position, a comparison across the treatments, and a trace of how each number was reached. Generated tax forms are not shipped. Form 6781, Schedule D, Form 8949 and amended-return worksheets are planned, not available, and we do not prepare, sign or file anything. We also do not tell you that a characterization is correct; that decision is yours and your preparer's.

For the wider picture, start at the Prediction Market Tax Center. Whether your winnings are taxable at all is in are Kalshi winnings taxable; the characterization everything here turns on is in are prediction markets taxed as gambling; the 60/40 and marking mechanics are in the Section 1256 60/40 guide; prior years are in how to amend a tax return for Kalshi losses; and if the records themselves are the obstacle, see how to track prediction market trades for taxes.

The bottom line

Kalshi gives you a realized figure that covers closed positions only, and no tax form for any of it, so the number that decides your year is one you build. Settle the treatment with a preparer first, because the arithmetic differs by regime and what is at stake differs by person. Then hold that position. None of the four is an election, so the defensible pattern is to decide what these contracts are before you know how the year went, and file it the same way every year. A losing year filed under Section 1256 costs you almost nothing against plain capital, and it is what makes the winning year credible. Then the two things that actually make this hard are getting a complete fill history, which means reading both the live and archived tiers rather than one, and producing a defensible year-end mark for anything still open, which means pulling the right daily close and reading its timestamp in Eastern time. Everything after that is arithmetic.

Keep reading

Browse all guides or start from the Prediction Market Tax Center.