Providing Cost Basis information via API

Provide cost basis and acquisition dates for in-kind deposits (assets transferred into Anchorage from an external source) via API

Overview

When assets are deposited from an external source, Anchorage may not have the original acquisition details. If cost basis isn't provided, the system defaults to $0, which may affect your reported gains/losses. This information ensures that tax lots and gains/loss calculations reflect accurate historical cost basis.

Cost basis information you provide may impact data reported on 1099-DA, for eligible US tax-paying entities. Anchorage Digital partners with Taxbit to support tax reporting, including 1099-DA, 1099-MISC, and 1099-INT.

Note: Anchorage Digital does not provide financial, tax, or legal advice. Consult a qualified professional for guidance specific to your situation.

Cost basis method (HIFO)

Anchorage Digital uses HIFO (Highest-In, First-Out) by default for cost basis accounting unless otherwise configured.

Example (HIFO):

  • Purchase 1: 10 BTC at $20k/BTC
  • Purchase 2: 20 BTC at $22k/BTC
  • Purchase 3: 15 BTC at $35k/BTC

If 25 BTC are sold:

  • 15 BTC from Purchase 3 are assumed sold first (highest cost)
  • Remaining 10 BTC from Purchase 2

Anchorage Digital will leverage the “highest-in, first-out” (HIFO) accounting method unless otherwise specified by the client. Taxbit offers HIFO, LIFO and FIFO. Contact Anchorage customer service to request a change in default cost basis methodology. Individual lot selection isn't currently available.

Default logic and validations

  • If a deposit is missing user-provided cost basis, the system assigns a default cost basis of 0. This means gains/losses could be incorrect. Provide cost basis information promptly after deposits are completed to avoid inaccurate reporting.
  • Cost basis updates support up to 100 lots per transaction.
  • The acquisition date must be on or before the transfer/deposit date (the API enforces this).
  • Trades may have small rounding differences due to settlement precision. Your internal reconciliation should account for this.

API workflow for user-provided cost basis

The typical flow is:

  1. List your tax accounts.
  2. List deposit transactions for a tax account.
  3. Identify deposits that are missing cost basis.
  4. Submit cost basis + acquisition dates (one request per deposit transaction).

1) List tax accounts

Use this endpoint to identify tax accounts your API credentials can access.

  • GET /tax/accounts

Response (example):

{
  "accounts": [
    {
      "taxAccountId": "acc_123",
      "name": "Example 123"
    }
  ]
}

2) List deposit transactions for a tax account

Use this endpoint to retrieve deposit transactions for a given tax account.

  • GET /tax/accounts/{taxAccountId}/transactions

Recommended client-side filters:

  • hasCostBasis = false, where giving a false value will return deposits that are missing user-provided cost basis

Response (example):

{
  "data": [
    {
      "assetType": "BTC",
      "externalId": "9be748be-d760-4d36-90f8-86b699c4e8bd",
      "id": "9cd9f4d4-078b-4e44-a308-7662fec0f546",
      "receivedAssets": [
        {
          "acquisitionDatetime": "2026-04-06T17:55:48.083Z",
          "costBasis": "2500",
          "quantity": "1.0"
        }
      ],
      "transactionTime": "2022-07-30T22:15:31.99999Z"
    }
  ],
  "page": {
    "next": "<next page url>"
  }
}

3) Provide cost basis for a deposit transaction

When you identify a deposit missing cost basis, update it by submitting one or more lots whose total quantity matches the deposit quantity.

  • PATCH /tax/accounts/{taxAccountId}/transactions/{transactionId}

Request (example):

{
  "lots": [
    {
      "quantity": "0.7500",
      "costBasis": "15000.00",
      "acquisitionDate": "2024-05-10T14:19:52.539Z"
    },
    {
      "quantity": "0.5000",
      "costBasis": "12000.00",
      "acquisitionDate": "2023-11-02T14:19:52.539Z"
    }
  ]
}

Validation rules:

  • Total lot quantities must equal the transaction quantity.
  • Acquisition date must be on/before transfer date.
  • Up to 100 lots per transaction.

4) Confirm the update

Re-fetch the transaction and verify:

  • costBasis is no longer 0
  • lots were accepted as submitted

Operational guidance

  • Timing: Update cost basis as soon as possible after an in-kind deposit so downstream reporting reflects accurate lots and potential gains/loss.
  • Source of truth: Use your internal records (exchange statements, wallet history, or prior custodians’ reports) to determine acquisition dates and basis.
  • Auditability: Retain supporting documentation for the lot inputs used.

Troubleshooting

Common causes of failures:

  • Lot quantities don’t sum to the deposit quantity.
  • Acquisition date is after the transfer date.
  • Too many lots (> 100).
  • Asset mismatch between lots and deposit.
  • Asset type is not recognized.

Appendix: Tax terminology

TermOverview
Tax accountThe top-level unit used in the API for tax reporting.
Tax transactionA tax-relevant event such as a deposit.
Gains/lossThe difference between the sale price of an asset and its cost basis.
InventoryThe total quantity and cost basis of a specific asset type, which can consist of multiple tax lots.
Tax lotA specific group of units acquired at the same time and cost basis.
Acquisition dateThe date when an individual gains control of an asset.
Cost basisThe value of an asset in USD at the time of acquisition, used to calculate gains or losses on disposition.
Cost basis methodThe methodology used to compute gains/losses (e.g., HIFO, FIFO, LIFO).
Missing cost basisOccurs when assets are transferred into Anchorage from an external source without original acquisition details.
Holding periodThe duration an asset is held before being sold.
Realized gain/lossGains or losses from the sale or disposition of an asset.
Unrealized gain/lossGains or losses from asset price fluctuation that haven't been realized through a sale.


Did this page help you?