Choose a disposition method

A disposition method decides which lots a sale draws from, and with them the gains Taxbit reports. Where it is set, how to change it, and what changing it does.

A disposition method decides which acquisition lots a sale draws from. It is the single setting with the largest effect on the gain figures Taxbit reports. A filer carries a default, and you can override it on an account or on a single transaction.

Before you begin: an account with transactions. See Set up inventory and gains. Read this before your first production run, because a method change triggers a recalculation of gains.

Supported methods

These four work on a filer, an account, a transaction, and an account's method history:

  • FIFO, first in, first out. The oldest lots are sold first. In a rising market this surfaces the largest gains earliest, and the lots it sells are the ones held longest, so they reach long-term treatment soonest.
  • LIFO, last in, first out. The newest lots are sold first. Gains track recent price movement closely, and older lots stay open.
  • HIFO, highest in, first out. The most expensive lots are sold first, minimizing the reported gain on each disposition.
  • LOFO, lowest in, first out. The least expensive lots are sold first, maximizing the reported gain on each disposition and leaving higher-cost lots open.

Two more apply in narrower places:

  • SPECID, specific lot identification. The sale names the lots it draws from. It can only be set on a transaction.
  • AUSTRIA. Applies Austrian withholding rules. It can be set on a filer or an account when you create it. See Austria Tax Withholding.

Supported methods lists exactly which values each object accepts.

Where the method is set

Methods are set at three levels, and the narrower one wins: a method on a transaction overrides the account's, and the account's overrides the filer's.

  • Filer. The default for every account under it. Set up your filer shows how to set it.
  • Account. Optional. Set it at creation, and change it over time with an effective date.
  • Transaction. Optional, for that one transaction. The only level where SPECID can be used.

To change an existing account's method, add an entry to its method history with POST /v1/accounts/{id}/disposition-methods/history and an effective_datetime. PATCH /v1/accounts/{id} ignores disposition_method: it returns 200, but the method doesn't change. The {id} in the path is your system's account ID. The body is a data array, and each entry takes exactly two fields: disposition_method and effective_datetime.

curl -X POST $BASE_URL/v1/accounts/acct_5f2e7d10/disposition-methods/history \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      { "disposition_method": "HIFO", "effective_datetime": "2027-01-01T00:00:00Z" }
    ]
  }'
{
  "data": [
    { "disposition_method": "HIFO", "effective_datetime": "2027-01-01T00:00:00Z", "id": 1234 }
  ]
}

New entries add to the history; they don't replace it. GET on the same path lists the entries, and PATCH and DELETE on /v1/accounts/{id}/disposition-methods/history/{history_id} change or remove one. The filer's own history is at GET /v1/filers/{id}/disposition-methods/history.

The account's own disposition_method field keeps showing its creation value after the history changes the method in effect. Read the method history to see which method applies, not the account.

The same trades, four outcomes

Four purchases of ETH, then one sale of 1 ETH at $3,000 on July 15. The transactions are identical in all four cases; only the method differs.

Lots held at the time of sale:

AcquiredQuantityCost
Jan 121 ETH$2,600
Mar 41 ETH$3,400
May 91 ETH$1,800
Jun 221 ETH$2,900
MethodLot soldBasis usedReported gain
FIFOJan 12$2,600$400
LIFOJun 22$2,900$100
HIFOMar 4$3,400($400)
LOFOMay 9$1,800$1,200

That is a $1,600 spread on one sale of one asset. Across a full year of activity the difference compounds, which is why the method belongs in your integration decisions rather than in a settings screen your users discover later.

📘

Changing the method recalculates gains

If the effective date is in the past, open lots and realized gains from that date forward are recalculated under the new method, within about three seconds, and figures you've already shown a user can move. An entry dated in the future changes nothing before its effective date. To know when the recalculation is done, wait for the INVENTORY_UPDATE webhook.

Where to go next