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:
| Acquired | Quantity | Cost |
|---|---|---|
| Jan 12 | 1 ETH | $2,600 |
| Mar 4 | 1 ETH | $3,400 |
| May 9 | 1 ETH | $1,800 |
| Jun 22 | 1 ETH | $2,900 |
| Method | Lot sold | Basis used | Reported gain |
|---|---|---|---|
| FIFO | Jan 12 | $2,600 | $400 |
| LIFO | Jun 22 | $2,900 | $100 |
| HIFO | Mar 4 | $3,400 | ($400) |
| LOFO | May 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 gainsIf 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_UPDATEwebhook.
Where to go next
- Supported methods: the values each object accepts, and how to send a SPECID sale.
- API reference: Method history, Disposition methods.
Updated 7 days ago
