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:
- List your tax accounts.
- List deposit transactions for a tax account.
- Identify deposits that are missing cost basis.
- 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:
costBasisis no longer0- 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
| Term | Overview |
|---|---|
| Tax account | The top-level unit used in the API for tax reporting. |
| Tax transaction | A tax-relevant event such as a deposit. |
| Gains/loss | The difference between the sale price of an asset and its cost basis. |
| Inventory | The total quantity and cost basis of a specific asset type, which can consist of multiple tax lots. |
| Tax lot | A specific group of units acquired at the same time and cost basis. |
| Acquisition date | The date when an individual gains control of an asset. |
| Cost basis | The value of an asset in USD at the time of acquisition, used to calculate gains or losses on disposition. |
| Cost basis method | The methodology used to compute gains/losses (e.g., HIFO, FIFO, LIFO). |
| Missing cost basis | Occurs when assets are transferred into Anchorage from an external source without original acquisition details. |
| Holding period | The duration an asset is held before being sold. |
| Realized gain/loss | Gains or losses from the sale or disposition of an asset. |
| Unrealized gain/loss | Gains or losses from asset price fluctuation that haven't been realized through a sale. |
Updated 3 months ago
What’s Next
API reference here https://developers.anchorage.com/reference/gettaxaccounts