Handle transfers

Send assets moving into and out of accounts, and give deposits a cost basis so their gains can be calculated.

A transfer moves an asset into or out of an account without a sale. When an asset arrives from outside your platform, Taxbit has no record of what it cost, so the lot it creates is missing cost basis, and a later sale from it cannot produce an accurate gain. This walkthrough sends a transfer, shows the gap, and points to the four ways to fill it.

By the end of this page you have sent a deposit, seen its lot marked as missing cost basis, and know which of the four child pages applies to your case.

Before you begin

Send the transfer

A transfer in is a deposit, and a transfer out is a withdraw, both sent to POST /v1/transactions/external-id. The subtype says what kind of transfer it is:

TypeSubtypes
depositach, blockchain, card-reward, gift, cost-basis-fmv, inheritance, internal-personal
withdrawach, blockchain, gift, internal-personal

This account receives 0.75 ETH from an outside wallet:

curl -X POST $BASE_URL/v1/transactions/external-id \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "dep_40731",
    "account_id": "acct_5f2e7d10",
    "type": "deposit",
    "subtype": "blockchain",
    "datetime": "2026-09-02T09:15:00Z",
    "received": [{
      "asset_amount": { "amount": "0.75", "asset": { "code": "ETH", "type": "Crypto" } },
      "rates": [{ "amount": "3100.00", "asset": { "code": "USD", "type": "Fiat" } }]
    }]
  }'

You should see 201 with "status": "success".

See the missing cost basis

Read the account's ETH inventory, as in Retrieve inventory. The lot the deposit created carries missing_cost_basis: true and no cost, and the summary counts it in total_quantity_missing_cost_basis. By default, every lot created from a transfer starts this way.

Give the deposit a basis

Pick the page for how the asset reached the account:

The asset came fromDo thisPage
Outside your platform, and the user can tell you what they paidAttach user-entered lots to the depositUser-provided cost basis
Another account of the same user on your platformLink the withdrawal and the depositInternal personal transfers
Another person, as a giftLink to the gifter's withdrawal, or attach lotsGifts
An estateSend the deposit with subtype inheritance and the value at the date of deathInheritance

Two more cases are not transfers between accounts. A deposit with subtype cost-basis-fmv records an asset acquired at its fair market value: the lot's cost is its value from rates, plus any fee, so it never starts as missing cost basis. A cost-basis-transfer with subtype wrapping or asset-name-change moves basis from one asset to another. It takes exactly one sent and one received entry, with different assets; the sent lots' total cost and acquisition dates carry to the received asset, with quantity and unit cost rescaled to the received amount; any received quantity the sent lots don't cover is missing cost basis; and a fee on it is a taxable disposition. Its fields are in the Transactions reference.

Where to go next