Supported methods
The cost-basis method values Taxbit accepts, which objects accept each one, and the fields a SPECID sale needs.
Part of Choose a disposition method, which explains how the cost-basis method (disposition_method) changes reported gains and how to change it.
Accepted values by object
| Value | Filer (POST /v1/filers) | Account (POST /v1/accounts) | Method history (POST /v1/accounts/{id}/disposition-methods/history) | Transaction (POST /v1/transactions/external-id) |
|---|---|---|---|---|
HIFO | Yes | Yes | Yes | Yes |
FIFO | Yes | Yes | Yes | Yes |
LIFO | Yes | Yes | Yes | Yes |
LOFO | Yes | Yes | Yes | Yes |
AUSTRIA | Yes | Yes | No | No |
SPECID | No | No | No | Yes |
PATCH /v1/accounts/{id} does not accept disposition_method, and PATCH /v1/filers/{id} accepts neither disposition_method nor is_default. Change an account's method through its method history.
Methods
| Value | Name | Lots a sale draws from |
|---|---|---|
HIFO | Highest in, first out | The highest-cost lots first. |
FIFO | First in, first out | The oldest lots first. |
LIFO | Last in, first out | The newest lots first. |
LOFO | Lowest in, first out | The lowest-cost lots first. |
SPECID | Specific lot identification | The lots the transaction names in inventory_lots. |
AUSTRIA | Austrian withholding | Austria's inventory, gains, and withholding rules. See Austria Tax Withholding. |
SPECID transactions
A transaction with disposition_method set to SPECID names the lots it disposes of in inventory_lots.
inventory_lotsis an object keyed by Taxbit lot ID, each mapped to a quantity. Lot IDs come fromGET /v1/inventory; see Retrieve inventory.- Required on every crypto line item when
disposition_methodisSPECID. - Allowed only on items in
sentandfees, neverreceived. Not permitted ondeposittransactions. - From 1 to 25 lots per line item.
- The lot quantities must add up to the line item's
asset_amount.
If a named lot can't be found, or holds less than the quantity named for it, Taxbit still accepts the transaction with 201. The calculation then records an INVENTORY_ERROR event for the account with the message Specific lots are missing or contain insufficient quantity, and disposes of the whole amount by the account's default cost-basis method instead of the named lots. A lot ID that isn't a valid UUID is rejected at POST with 400.
{
"id": "trade_88215",
"account_id": "acct_5f2e7d10",
"type": "trade",
"datetime": "2026-08-03T10:41:00Z",
"disposition_method": "SPECID",
"sent": [
{
"asset_amount": { "amount": "0.5", "asset": { "code": "ETH", "type": "Crypto" } },
"rates": [{ "amount": "3100.00", "asset": { "code": "USD", "type": "Fiat" } }],
"inventory_lots": {
"b72696f9-0f10-5827-94c3-289b6366a599": { "quantity": "0.5" }
}
}
],
"received": [
{
"asset_amount": { "amount": "1550.00", "asset": { "code": "USD", "type": "Fiat" } },
"rates": [{ "amount": "1.00", "asset": { "code": "USD", "type": "Fiat" } }]
}
]
}Method history entries
| Field | Type | Required | Description |
|---|---|---|---|
disposition_method | string | Required | HIFO, FIFO, LIFO, or LOFO. |
effective_datetime | string | Required | ISO 8601 timestamp from which the method applies. |
The request body is {"data": [...]} with one or more entries; no other fields are accepted. The response returns each entry with a numeric id, used by PATCH and DELETE on /v1/accounts/{id}/disposition-methods/history/{history_id}.
Related
Updated 4 days ago
