# Bitwave Documentation Hub Documentation > Bitwave stands out in the realm of cryptocurrency tax software by offering a user-friendly platform that supports a wide range of digital assets, including Bitcoin, Ethereum, Solana, Avalanche, and Ripple. Their crypto tax calculator simplifies the computation of taxable events and crypto capital gains, adhering to IRS crypto tax guidelines. This enables traders, investors, and miners alike to navigate cryptocurrency tax reporting with ease. Bitwave's dedication to providing comprehensive tools for IRS crypto tax compliance ensures that users can confidently report their crypto transactions while optimizing their tax outcomes. Whether you're managing Bitcoin tax obligations or assessing Ethereum gains, Bitwave equips you with the necessary resources to streamline the crypto tax filing process efficiently. ## Guides - [Welcome to Bitwave!](https://docs.bitwave.io/docs/welcome.md) - [Getting Started](https://docs.bitwave.io/docs/getting-started.md) - [The Onboarding Journey](https://docs.bitwave.io/docs/onboarding.md) - [Setup & Configuration](https://docs.bitwave.io/docs/setup-configuration.md) - [Login to Bitwave](https://docs.bitwave.io/docs/login-to-bitwave.md) - [Connect General Ledger Software](https://docs.bitwave.io/docs/connect-general-ledger-software.md) - [Create Categories & Contacts](https://docs.bitwave.io/docs/create-categories-contacts.md) - [Set Accounting Defaults](https://docs.bitwave.io/docs/set-accounting-defaults.md): Accounting Defaults for Gas Fees, AP, & AR - [Add Wallets, Exchanges, Custodial, Manual](https://docs.bitwave.io/docs/add-wallets-exchanges-custodial.md) - [Import Data into Manual Wallets](https://docs.bitwave.io/docs/import-data-into-manual-wallets.md) - [Set Beginning Balances](https://docs.bitwave.io/docs/set-beginning-balances.md) - [Check Wallet/Account Balances](https://docs.bitwave.io/docs/check-wallet-account-balances.md) - [Set Up Inventory Views](https://docs.bitwave.io/docs/set-up-inventory-views.md) - [Categorization](https://docs.bitwave.io/docs/categorization.md) - [Viewing Transactions](https://docs.bitwave.io/docs/viewing-transactions.md) - [Transaction Screen Operations](https://docs.bitwave.io/docs/transaction-screen-operations.md) - [Individual Transaction Categorization](https://docs.bitwave.io/docs/individual-transaction-categorization.md) - [Check Pricing Data](https://docs.bitwave.io/docs/check-pricing-data.md) - [Set Up Categorization Rules](https://docs.bitwave.io/docs/set-up-categorization-rules.md) - [Set Up Contact-Based Categorization Defaults](https://docs.bitwave.io/docs/set-up-contact-based-categorization-defaults.md) - [Bulk Categorization](https://docs.bitwave.io/docs/bulk-categorization-1.md) - [System Jobs](https://docs.bitwave.io/docs/system-jobs-1.md) - [Journal Entries & Gain/Loss](https://docs.bitwave.io/docs/journal-entries-gainloss.md) - [Push transactions (JE's) to General Ledger](https://docs.bitwave.io/docs/push-transactions-jes-to-general-ledger.md) - [Manually Record Journal Entry Totals](https://docs.bitwave.io/docs/manually-record-journal-entry-totals.md) - [Record Impairment and Mark-to-Market Adjustments](https://docs.bitwave.io/docs/record-impairment-and-mark-to-market-adjustments.md) - [Record Realized Gain/Loss](https://docs.bitwave.io/docs/record-realized-gainloss.md) - [Trade Journal Entries & Gain/Loss Calculation](https://docs.bitwave.io/docs/trade-journal-entries-gainloss-calculation.md) - [Reports and Period-End Close](https://docs.bitwave.io/docs/reports-and-period-end-close.md) - [Inventory Views Reporting](https://docs.bitwave.io/docs/cost-basis-summary-from-inventory-views.md) - [Balance Report](https://docs.bitwave.io/docs/balance-report-1.md) - [Running the Balance Report via the API](https://docs.bitwave.io/docs/running-the-balance-report-via-the-api.md): Generate the Balance Report through Bitwave's asynchronous reporting API, poll for completion, and fetch the result as structured rows or a CSV file. - [Journal Entry Reports](https://docs.bitwave.io/docs/journal-entry-reports.md) - [Period End Checklist](https://docs.bitwave.io/docs/period-end-checklist.md) - [Period End Reconciliation](https://docs.bitwave.io/docs/period-end-reconciliation.md) - [Accepting Bitwave Invite!](https://docs.bitwave.io/docs/accepting-bitwave-invite.md) - [In-App Support](https://docs.bitwave.io/docs/in-app-support.md) - [Users](https://docs.bitwave.io/docs/users.md) - [Administration](https://docs.bitwave.io/docs/settings.md) - [Bitwave User Registration](https://docs.bitwave.io/docs/bitwave-user-registration-guide.md) - [Bitwave Partner Listing Process Guide](https://docs.bitwave.io/docs/join-marketplace.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-9.md) - [Navigating the New Bitwave UI](https://docs.bitwave.io/docs/navigating-the-new-ui.md): Learn how to find familiar features and navigate the redesigned Bitwave interface using the new top-level categories. - [Wallets & Connections](https://docs.bitwave.io/docs/wallets-exchanges-custodial.md) - [Onchain Wallets](https://docs.bitwave.io/docs/onchain-wallets.md): Bitwave is an enterprise finance platform designed to help businesses manage, track, and report digital assets at scale. Bitwave customers can use the instructions below to securely connect their wallets to the platform. With Bitwave, you'll have total visibility into your on-chain financial landscape. https://www.bitwave.io/ - [Exchange Wallets](https://docs.bitwave.io/docs/exchanges-1.md) - [Custodial Wallets](https://docs.bitwave.io/docs/custodial.md) - [Manual Wallets](https://docs.bitwave.io/docs/manual.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-1.md) - [❓FAQs -2](https://docs.bitwave.io/docs/faqs-2-1.md) - [Transactions UI](https://docs.bitwave.io/docs/transactions-ui.md) - [System Jobs](https://docs.bitwave.io/docs/system-jobs.md) - [Export Transactions](https://docs.bitwave.io/docs/transactions-export-1.md) - [Locking Periods](https://docs.bitwave.io/docs/locking-periods.md) - [Vested Tokens](https://docs.bitwave.io/docs/vested-tokens.md): How do I account for vested tokens in Bitwave? - [How do I account for tokens staked on an exchange?](https://docs.bitwave.io/docs/how-do-i-account-for-tokens-staked-on-an-exchange.md) - [How to retain From and To details in rolled-up transactions](https://docs.bitwave.io/docs/how-to-retain-from-and-to-details-in-rolled-up-transactions.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-10.md) - [❓FAQs -2](https://docs.bitwave.io/docs/faqs-2.md) - [Manual Import](https://docs.bitwave.io/docs/manual-import.md) - [Advanced Manual Import](https://docs.bitwave.io/docs/advanced-manual-import.md) - [Custom Import Transforms](https://docs.bitwave.io/docs/custom-imports.md): Import Raw Transaction Data Directly into Bitwave - [Importing Trades](https://docs.bitwave.io/docs/importing-trades.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-2.md) - [❓FAQs - 2](https://docs.bitwave.io/docs/faqs-2-3.md) - [Accounting Defaults for Gas Fees, AP & AR](https://docs.bitwave.io/docs/accounting-defaults-for-gas-fees-ap-ar.md) - [Create Contacts & Categories](https://docs.bitwave.io/docs/create-manual-contacts-categories.md) - [Create Manual Contacts](https://docs.bitwave.io/docs/manual-contacts.md) - [Create Manual Categories](https://docs.bitwave.io/docs/manual-categories.md) - [Individual Transaction Categorization](https://docs.bitwave.io/docs/individual-transaction-categorization-1.md) - [Contact-based Categorization Default & In-line Categorization](https://docs.bitwave.io/docs/contact-based-categorization-default-in-line-categorization.md) - [Bulk Categorization](https://docs.bitwave.io/docs/bulk-categorization-2.md) - [Transaction Needs Review Status](https://docs.bitwave.io/docs/transaction-needs-review-status.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions.md) - [How to use Rules](https://docs.bitwave.io/docs/how-to-use-rules.md) - [Rules for Special Cases](https://docs.bitwave.io/docs/rules-for-special-cases.md) - [Verify Transaction Will Work with Rule](https://docs.bitwave.io/docs/verify-transaction-will-work-with-rule.md) - [Rules for Solana Validator](https://docs.bitwave.io/docs/rules-for-solana-validator.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-3.md) - [Accounting Workflow Overview](https://docs.bitwave.io/docs/accounting-workflow-overview-1.md) - [Connect General Ledger/ERP Software](https://docs.bitwave.io/docs/connect-general-ledgererp-software.md) - [Xero Connection Guide](https://docs.bitwave.io/docs/xero.md) - [Sage Connection Guide](https://docs.bitwave.io/docs/sage-intacct-configuration-guide.md) - [Netsuite Connection Guide](https://docs.bitwave.io/docs/netsuite.md) - [Netsuite Enterprise Payments Setup](https://docs.bitwave.io/docs/bitwave-to-netsuite-enterprise-payments-setup.md) - [QuickBooks Connection Guide](https://docs.bitwave.io/docs/quickbooks.md) - [Push Transactions to General Ledger/ERP](https://docs.bitwave.io/docs/push-transactions-to-general-ledgererp.md) - [Period End Close](https://docs.bitwave.io/docs/period-end-close-1.md) - [Invoice Categorization](https://docs.bitwave.io/docs/invoicing.md): Set up Invoice Categorization With Different Accounting Connections - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-4.md) - [❓FAQs - 2](https://docs.bitwave.io/docs/faqs-2-4.md) - [Balance Report](https://docs.bitwave.io/docs/balance-report.md) - [Journal Entry Reports](https://docs.bitwave.io/docs/journal-entry-report.md) - [Datawarehouse Reports](https://docs.bitwave.io/docs/datawarehouse-reports.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-7.md): Undo Reconciliation - [❓FAQs -2](https://docs.bitwave.io/docs/faqs-2-5.md) - [Wrapping Treatments](https://docs.bitwave.io/docs/wrapping-treatments.md) - [❓FAQs](https://docs.bitwave.io/docs/faqs-bitwave-calculations.md) - [Inventory Views](https://docs.bitwave.io/docs/inventory-views.md) - [Inventory Views](https://docs.bitwave.io/docs/inventory-views-1.md) - [Setup Inventory Views](https://docs.bitwave.io/docs/setup-inventory-views.md) - [NEW! Reallocation Setup for Inventory View](https://docs.bitwave.io/docs/new-reallocation-setup-for-inventory-view.md) - [Reconciliation using Data Sources](https://docs.bitwave.io/docs/data-sources-for-reconciliation.md) - [Inventory Views Reporting](https://docs.bitwave.io/docs/inventory-views-reporting.md) - [Inventory Groups](https://docs.bitwave.io/docs/inventory-views-reporting-copy.md): This is a paid Feature Flag, so it needs to be turned on. - [Cost Basis Rollforward](https://docs.bitwave.io/docs/cost-basis-rollforward.md) - [Multiple Inventories](https://docs.bitwave.io/docs/setup-inventory-groups.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-8.md) - [❓FAQs -2](https://docs.bitwave.io/docs/faqs-2-2.md) - [DeFi Setup](https://docs.bitwave.io/docs/defi-setup.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-6.md) - [Pricing Guide](https://docs.bitwave.io/docs/pricing-guide.md) - [Pricing Engine](https://docs.bitwave.io/docs/pricing-1.md): How does pricing work? - [Pricing Context ](https://docs.bitwave.io/docs/pricing-context.md) - [❓FAQs](https://docs.bitwave.io/docs/frequently-asked-questions-5.md) - [Bitwave Advanced Security](https://docs.bitwave.io/docs/bitwave-advanced-security.md) - [Bitwave Payment Network (BPN)](https://docs.bitwave.io/docs/bitwave-payment-network.md): is an ecosystem connecting businesses, vendors, and technology partners to power fast, low-cost, and programmable payments on-chain. - [Starting Bitwave Payments Network](https://docs.bitwave.io/docs/intro-to-bitwave-payments-network.md) - [Set-Up for Base Onchain Payments](https://docs.bitwave.io/docs/guide.md) - [Payments Not Working on Corporate Network or VPN](https://docs.bitwave.io/docs/payments-not-working-on-corporate-network-or-vpn.md) - [CORS Error When Using Cato VPN](https://docs.bitwave.io/docs/cors-error-when-using-cato-vpn.md) - [FAQ](https://docs.bitwave.io/docs/faq.md) - [Glossary](https://docs.bitwave.io/docs/glossary-1.md) - [Overview](https://docs.bitwave.io/docs/new-page.md) - [Metadata Based Rule Categorization](https://docs.bitwave.io/docs/metadata-based-rule-categorization.md) - [Bitwave Onboarding Process - Canton Ecosystem](https://docs.bitwave.io/docs/bitwave-onboarding-guide-canton-ecosystem.md) - [Connecting Bitwave to Canton Private Ledgers](https://docs.bitwave.io/docs/connecting-bitwave-to-canton-private-ledgers.md) - [Generating an Authentication Token](https://docs.bitwave.io/docs/generating-an-authentication-token.md): Learn how to request a v2 OAuth-style access token for the Bitwave API and use it to authenticate subsequent API calls. - [Exchanges & Custodians](https://docs.bitwave.io/docs/exchanges.md) - [Blockchains](https://docs.bitwave.io/docs/blockchain-integrations.md): This list shows all the current blockchain integrations that are now available on Bitwave. - [General Ledger/ERP](https://docs.bitwave.io/docs/general-legdererp.md) - [DeFi Protocols](https://docs.bitwave.io/docs/defi-protocols.md) - [API Loaded Data sources](https://docs.bitwave.io/docs/api-loaded-data-sources.md) - [Retrieve Datasource Rows](https://docs.bitwave.io/docs/get-datasource-rows.md) - [All Connection Guides](https://docs.bitwave.io/docs/all-connection-guides.md) - [Add Coinbase Prime/Exchange API](https://docs.bitwave.io/docs/connecting-coinbase-proexchange.md) - [Add Coinbase Retail API](https://docs.bitwave.io/docs/add-coinbase-retail-api.md) - [Setup SSO](https://docs.bitwave.io/docs/setup-sso.md) - [NetSuite Connection](https://docs.bitwave.io/docs/adding-netsuite.md) - [How to Connect NetSuite](https://docs.bitwave.io/docs/how-to-connect-netsuite.md) - [Sage Connection](https://docs.bitwave.io/docs/sage-connection.md) - [Add SCIM connection](https://docs.bitwave.io/docs/add-scim-connection.md) - [Setup Snowflake](https://docs.bitwave.io/docs/setup-snowflake.md) - [Change Logs Home](https://docs.bitwave.io/docs/change-logs.md) ## API Reference - [Get an API Key](https://docs.bitwave.io/reference/get-an-api-key.md) - [Bitwave Public GitLab](https://docs.bitwave.io/reference/bitwave-public-gitlab.md) - [post](https://docs.bitwave.io/reference/createratetable.md): Create a rate table inside an organization - [get](https://docs.bitwave.io/reference/getorgratetables.md): Get a list of the rate tables for an organization - [post](https://docs.bitwave.io/reference/loadratetable.md): Load data into a rate table - [get](https://docs.bitwave.io/reference/getratetabledata.md): Get the entries from a rate table - [get](https://docs.bitwave.io/reference/geteffectiverate.md): Get the entries from a rate table - [get](https://docs.bitwave.io/reference/getratetablerow.md): Get an entry from a rate table - [patch](https://docs.bitwave.io/reference/updaterowrate.md): Update the rate on an entry from a rate table - [delete](https://docs.bitwave.io/reference/deleteratetablerow.md): Get the entries from a rate table - [delete](https://docs.bitwave.io/reference/deleteratetablerows.md): Get the entries from a rate table - [get](https://docs.bitwave.io/reference/health-1.md): Ping the server for liveness - [get](https://docs.bitwave.io/reference/getswagger.md): Get the swagger json file - [List invoices](https://docs.bitwave.io/reference/listinvoices.md): Returns a cursor-paginated list of your organization's invoices. Paginate by passing the returned `cursor` back as the `cursor` query parameter until `hasMore` is false. **Cursor stability:** cursors are stable against concurrent changes only when ordering by `createdAt` (the default). When ordering by `dueDate`, `issueDate`, or `updatedAt`, a row changed mid-pagination may be skipped or repeated — for a consistent snapshot, sort by `createdAt`. - [Create an invoice](https://docs.bitwave.io/reference/createinvoice.md): Creates an invoice for your organization. Set the customer via `customerId` (find candidates with `GET /v1/customers`), and one or more receiving accounts via `paymentAccountIds` (find candidates with `GET /v1/payment-accounts?enabledForAR=true`). Payment accounts are optional at create time but at least one is required before you can share the invoice. Set `denomination` to `fiat` or `token`. A `fiat`-denominated invoice prices its lines in fiat and lists the token/network rails the payor may settle on in `paymentOptions` (e.g. a USD invoice payable in USDC or ETH on `base`). A `token`-denominated invoice prices its lines directly in tokens; for those lines you may set a per-line `exchangeRate` (USD per token), and **when you omit it the server values the line at the close price of its currency on the line's date**. The model is identical for single- and multi-currency invoices: the invoice's `totals` carry one entry per distinct line currency. Every invoice is created as a `draft` (`lifecycle: draft`, `settlement: unpaid`) and is fully editable. It is not committed until you call `POST /v1/invoices/{invoiceId}:issue` or `:share` — see the Invoice lifecycle section. A draft is native to Bitwave and is never synced to external systems. **Idempotency:** send an `Idempotency-Key` header so a network retry can't create a duplicate (see the API description). A new invoice returns `201`; a replay of the same key returns the original invoice with `200`. - [Get an invoice by id](https://docs.bitwave.io/reference/getinvoice.md): Returns a single invoice by its id. Returns `404` if no invoice with that id exists for your organization. - [Update an invoice](https://docs.bitwave.io/reference/updateinvoice.md): Updates an invoice. Editing is allowed **only while the invoice is a `draft`** — once it is committed (`lifecycle: issued` or beyond) its terms are frozen and any edit is refused with `409 precondition_failed`; change a committed invoice by `:void` + re-issue instead. Uses **JSON Merge Patch** (RFC 7396), so the request content type is `application/merge-patch+json`: - A field **present** with a value sets that value. - A field **present and `null`** clears it (nullable fields only; `null` on a non-nullable field is `400 invalid_request`). - A field **absent** is left unchanged. - The `lines` array, when **present**, REPLACES all line items — send the full list, including a line's `id` to keep/modify it, omitting `id` for a new line. `lines: []` clears all lines; omit the field to leave lines unchanged. Lifecycle and settlement are not editable here — move the invoice with the lifecycle commands (`:issue` / `:share` / `:sync` / `:void` / `:delete`); settlement is derived from payments. **Concurrency:** read the invoice's `version`, then send it in the body; a stale value is refused with `409 version_mismatch`. On success the invoice is returned with an incremented `version`. - [Issue (commit) an invoice](https://docs.bitwave.io/reference/issueinvoice.md): Commits the invoice (`lifecycle: draft → issued`). Once issued, its terms — including `lines` — are **frozen**; to change them you must `:void` and issue a replacement. Issuing makes the invoice **eligible** to sync to external sync points (e.g. ERP, on-chain). It does **not** share the invoice with the counterparty (use `:share`), and it does **not** guarantee any sync completed — drafts are never synced; `issued` only unlocks eligibility, and sync is eventual and observed off-resource. Refused with `409 precondition_failed` unless the invoice is currently a `draft`. Send the current `version`; a stale value is refused with `409 version_mismatch`. - [Share an invoice with the counterparty](https://docs.bitwave.io/reference/shareinvoice.md): Distributes the invoice to the counterparty over a `channel` (`relationship` — a Bitwave org-to-org connection — or `email`). `:share` is a **superset of `:issue`**: if the invoice is still a `draft`, it is committed (`lifecycle: issued`) first, then shared. Idempotent: re-sharing on the same channel succeeds with no change. **Precondition** (otherwise `409 precondition_failed`): the invoice must have at least one `paymentAccountIds` entry, so the payor has somewhere to pay (find candidates with `GET /v1/payment-accounts?enabledForAR=true`). A `voided` or `deleted` invoice cannot be shared. Send the current `version`; a stale value is refused with `409 version_mismatch`. - [Sync an invoice to external sync points](https://docs.bitwave.io/reference/syncinvoice.md): Explicitly (re)triggers convergence of this invoice to its external sync points (e.g. ERP, on-chain). Valid only once the invoice is `issued` (drafts are never synced); otherwise `409 precondition_failed`. Sync is **eventual and per-target** — a `200` here means the sync was *accepted*, not that any target has converged. The outcome is not represented on the invoice resource; observe it via events / the integration log. Whether sync runs automatically after `:share` is an account-level setting, not a per-request flag. Send the current `version`; a stale value is refused with `409 version_mismatch`. - [Void an invoice](https://docs.bitwave.io/reference/voidinvoice.md): Cancels a committed invoice but keeps it on record (including its number) for audit — sets `lifecycle: voided` and propagates a retraction to any sync points. This is the correction path for an issued invoice: void, then issue a replacement. **Preconditions** (otherwise `409 precondition_failed`): the invoice must be `issued` (a `draft` is removed with `:delete`, not voided) and `settlement: unpaid` — reverse payments or issue a credit note before voiding a partially/fully paid invoice. Send the current `version`; a stale value is refused with `409 version_mismatch`. - [Delete a draft invoice (soft)](https://docs.bitwave.io/reference/deleteinvoice.md): Discards a **draft** before it is committed — sets `lifecycle: deleted`. The record is retained and still returned by `GET /v1/invoices/{invoiceId}` (and by list with `lifecycle=deleted`); it is not destroyed. Drafts only: refused with `409 precondition_failed` if the invoice has already been issued (void an issued invoice instead). Send the current `version`; a stale value is refused with `409 version_mismatch`. - [List customers](https://docs.bitwave.io/reference/listcustomers.md): Returns a cursor-paginated list of your organization's customers. Use it to find the `customerId` to set when creating an invoice. - [Get a customer by id](https://docs.bitwave.io/reference/getcustomer.md): Returns a single customer by id. Returns `404` if no customer with that id exists for your organization. - [List payment accounts](https://docs.bitwave.io/reference/listpaymentaccounts.md): Returns a cursor-paginated list of your organization's payment accounts. Use it to find the receiving accounts to set in `paymentAccountIds` on an invoice. An invoice needs at least one account that can RECEIVE funds — filter with `enabledForAR=true`. - [Get a payment account by id](https://docs.bitwave.io/reference/getpaymentaccount.md): Returns a single payment account by id. Returns `404` if no account with that id exists for your organization. ## Changelog - [Change Log Home](https://docs.bitwave.io/changelog/change-log-home-1.md) - [2025 Release Change Log](https://docs.bitwave.io/changelog/2025-release-change-log.md) - [2024 Release Change Log](https://docs.bitwave.io/changelog/2024-release-change-log-1.md) - [2023 Release Change Log](https://docs.bitwave.io/changelog/2023-release-change-log.md) - [2022 Releases Change Log](https://docs.bitwave.io/changelog/2022-feature-releases.md)