# Updating the Chart of Accounts
Source: https://learn.breezing.io/advanced-features/add-account-to-coa
Learn how to refresh Breezing after adding a new account to your general ledger so it appears in your chart of accounts and is ready for mapping.
If you're categorizing transactions in Breezing and suddenly realize you need a brand new expense or asset account that doesn't exist yet (e.g., "Gas Fees"), you must create it in your accounting system first.
### Refreshing Your Accounts via API (Xero/QuickBooks)
1. Leave Breezing open and switch over to your Xero or QuickBooks Online tab.
2. Create the new account (e.g., an Expense account named "Gas Fees").
3. Save the account in Xero/QuickBooks.
4. Switch back to Breezing and navigate to the **Chart of Accounts** tab on the left menu.
5. Click **Sync Chart of Accounts** on your integration card.
6. Breezing will fetch the latest ledger, and your new "Gas Fees" account will instantly become available in all transaction dropdowns!
### Refreshing Your Accounts via CSV
If you are not using a direct Xero/QuickBooks API integration and originally uploaded your Chart of Accounts via CSV:
1. Open your master Chart of Accounts CSV file in Excel.
2. Add the new account row (Code, Name, Type).
3. Save the file.
4. In Breezing, go to **Chart of Accounts** > **Upload CSV**.
5. Upload the updated file. **Don't worry. Breezing will simply merge the new accounts. It will not duplicate your existing ones!**
All right, cool. So, here I want to update my chart of accounts. Whether it's QuickBooks or Zero or whatever it is, it's all kind of very similar. I need to first update it in the accounting system itself. So, here, right now, I'm in QuickBooks. Pretty easy to do. I'm going to create a new account. So, I'm going to hit new. It's going to open up a little side panel. I'm going to call this one gas fees. Basically, I'm going to basically choose the expense account. Maybe not uh maybe it's called bank charges on type. And it's going to hit save. Then I'm going to go ahead and go back to Breezing right over here. So here I'm going to search for gas fees. It doesn't exist as you can see. So what I'm going to do is pretty simple. I'm gonna go ahead and hit link accounts. Hit get accounts and then magically gas fees should appear. There it is. So go ahead and do that as many times as you need to. Remember to update the accounts back in the accounting system first and then get the accounts here. If you're using a CSV to upload into Breezing, go ahead and just adjust the CSV from your original accounting system, whether you're using Banana or whatever it might be, and then then just re-upload that chart of accounts back up to here, and it will not affect the accounts that you currently have. So, do not worry about that. It won't duplicate them. All right, cool. Hope that helps.
# Exporting CSV Journals
Source: https://learn.breezing.io/advanced-features/csv-journals
Generate and export raw journal entries for accounting systems that don't have a direct API integration.
If you use an ERP or accounting system that isn't directly integrated with Breezing via API (such as NetSuite, Odoo, Banana, or Abacus), you can easily generate and download your finalized journal entries as a CSV file to upload manually.
### How to Download Journal Entries
1. On your **Dashboard**, select the transactions you have finished categorizing.
2. Click the **Manage** dropdown menu at the top of the list.
3. Hover over **Download Journal** and choose your preferred export format:
* **Individuals:** Provides a highly detailed, row-by-row breakdown of every debit and credit for every single transaction.
* **Grouped (Account, Tax):** A condensed view that aggregates debits and credits by account and tax rate, minimizing the line items.
* **Grouped (Month, Account, Tax):** Consolidates the selected transactions into monthly journal entries, aggregated by account and tax rate.
4. The CSV will download immediately to your machine.
### The CSV Format
The downloaded CSV contains everything your ERP needs to post a valid journal entry, including:
* **Account Code** and **Account Name**
* **Description**
* **Debit** and **Credit** amounts
* **VAT** data (if applicable)
* **Narration** (containing the Breezing ID and Blockchain Transaction Hash for audit trails).
*Note: Breezing has already developed custom CSV export templates that perfectly match the required import structures for specific systems like Banana, Abacus, and Odoo. If your ERP requires a specific column layout, contact our support team and we can potentially build a custom CSV exporter for your workspace!*
all right next I'll show you how to produce a journal entry CSV so this is for the guys who basically are using maybe you know products that are not directly connected to breezing so if you're not using like a zero or QuickBooks you might want to get the CSV Journal so you can post it in your accounting system whatever that accounting system may be the way you do that's pretty easy once you've kind of labeled the account just's go ahead and select here hit manage and then go ahead down over here so download journal and you can click individual when you click that it'll produce a journal I'm just going to open it right here one second this is kind of what it looks like so here it's kind of giving you kind of the entry that you would need to post basically in your accounting system so it's got the code the name the amount the description the debit the credit any kind of vat equivalent and then the narration basically which is kind of like what the breezing typically ID and hash now you could get a Consolidated version of that you can go ahead manage again go to download and hit grouped by account and tax so go ahead and hit that it'll go ahead and download so it's a bit more of a Consolidated version as you can see wallets fees doesn't split everything out as like as detailed as this one with the with the key kind of accounts but it kind of shows a to like this with the debits and credits now you can also do a Consolidated with multiple entries so here I have legal expenses I have an outbound transaction and one with sales I'll select both of them I'll go to manage and again I can hit individual and get all the details or I can hit grouped or I can hit Group by month so go ahead I hit grouped here as well I got download the journal you'll see see this one has both entries and it's a bit more Consolidated basically and that's kind of what it looks like debit credit all the codes all the details that you would need now breezing has been known to basically develop csvs that can be directly uploaded into the accounting system so for example we have csvs for banana Abacus um and there's one more ODU as well where you can just we just get the download CSV the way in the format that it can D that the accounting system can digest so go ahead and contact us we'll consider it and we'll potentially build it for you guys thank you
# View Historical Wallet Balances
Source: https://learn.breezing.io/advanced-features/historical-balances
Instantly check your token balances at any historical date in Breezing without pulling full reports, ideal for period close checks and audits.
If you just need to quickly see exactly how much crypto a wallet held on a specific date in the past (like December 31st, 2021), you do not need to generate a full PDF/CSV report. Breezing's dashboard is fully dynamic and can travel back in time instantly.
### How to View Historical Balances
1. Navigate to your **Dashboard**.
2. Look for the **Time / Date Range** button at the top of the screen (it usually defaults to *All Time* or *Last Month*).
3. Click the button and select a custom date range.
4. Set the end date to the exact historical date you want to check (e.g., `Jan 1, 2020` to `Dec 31, 2020`).
5. Click apply.
The dashboard will instantly recalculate. The token balances and transaction counts displayed at the top of the screen will update to reflect **exactly what was in the wallet** on that historical end date.
all right cool next I'll show you how to easily check historical balances on breezing without having to kind of continuously pull reports so it's pretty easy so there's a little like time button here you see like all time last month so the best way to do is go let's say I wanted to check the balance like back in this is a pretty this account dates quite a bit so I want to check it back in 2029 I'll sh January 1st 2029 December 2029 and there you go it show me the balances back then it show me the number of transactions let's say okay I changed my mind I want to now check 20 20 go ahead and do that December New Balance 2020 balance more transactions pretty much continue to do that all the way through 2021 December boom now I see more balances more transactions so you can kind of historically very easily see your balances back in historical period without having toly run reports it's super Dynamic super quick I encourage you guys to use this feature it's really great and yeah let me know if any questions
# Locking Transactions
Source: https://learn.breezing.io/advanced-features/lock-transactions
Lock transactions in Breezing to freeze their details and gain/loss figures for closed periods, protecting them from edits and rules.
Once a period is closed and synced, the last thing you want is a rule, a price update, or a stray edit quietly changing last quarter's numbers. Locking freezes a transaction's details, including its net gain or loss, so they remain unchanged regardless of future calculations.
### What Locking Does
A locked transaction cannot be edited, deleted, re-priced, merged, or modified by [automation rules](/features/automation-rules) and auto-apply. Its cost basis and gain/loss figures are frozen even when you recalculate gains and losses later.
Locked transactions stay fully visible: you can still view, filter, export, and sync them. Locking protects the data, not your access to it.
### Locking a Period
1. On your **Dashboard**, filter for the period you are closing (for example, everything up to Dec 31).
2. Select the transactions, either individually or with the select-all checkbox for the whole filtered set.
3. Open the **Manage** menu and click **Lock**.
4. A confirmation explains that locking finalizes the details, including net gain or loss. Click **Lock** to confirm.
Bulk locks run in the background for large selections, and every lock is recorded in the transaction history.
### Unlocking
If you genuinely need to reopen a period, select the locked transactions and choose **Unlock** from the **Manage** menu. The confirmation warns that the details, including net gain or loss, become subject to change with future calculations again. Unlock deliberately: any recalculation after unlocking can change the figures you already reported.
### Filtering by Lock Status
The transaction filters include a lock filter with **Locked** and **Not Locked** options, which makes it easy to confirm the whole period is protected, or to find stragglers that were imported after the close.
### Where Locking Fits in a Period Close
1. Import the final transactions and clear your [Active Issues](/features/active-issues).
2. [Calculate gains and losses](/features/calculate-gain-loss) and sync the journals.
3. [Verify wallet balances](/features/balance-verification) as of the period end.
4. Lock the period.
From then on, rules, price updates, and recalculations only affect the open period. Balance checks and reports still include locked transactions, so your history stays complete.
# Manual Token Pricing
Source: https://learn.breezing.io/advanced-features/manual-token-prices
Learn how to use Breezing's manual token price tool to bulk assign custom fiat values for untracked assets, OTC deals, or non-public DAO tokens.
If you transact in tokens that are not publicly tracked on CoinGecko or major exchanges (like an unreleased SAFT token, a private DAO governance token, or an OTC deal), Breezing might not be able to pull an automatic FIAT price.
Instead of manually editing the fiat value on every single transaction one by one, you can use the **Manual Token Price** tool to bulk-update them based on a specific date range.
### How to Manually Price a Token
1. On your **Dashboard**, filter the view to isolate the specific token (e.g., `DAO` or `SAFE`).
2. Select the transactions you want to price using the bulk checkboxes on the left.
3. Click the **Manage** dropdown menu at the top of the list.
4. Select **Update Token Price**.
5. Switch the toggle from *Auto* to **Manual**.
6. Set the effective date (e.g., "After January 1st, 2023"). This ensures you only apply the price to transactions that occurred after the token actually held that value.
7. Enter the custom FIAT price per token (e.g., `$1.00`).
8. Click **Update**.
Breezing will instantly sweep through all the selected transactions that fall within that date range and recalculate their total FIAT amounts based on your custom price point.
Next thing I'll show you is what if you have like a native token where there's no publicly listed price, but you want to update that price basically. Let's say you have like a SAF and you have kind of like a price point for that SAF and you want to kind of get that price into Breezing somehow. So the way you do that is pretty simple. I'm going to just maybe take the Dow token just as like an example as it's probably the easiest or maybe I'll try caller. It's probably the easiest. So let's say I have this uh let's say caller token here. Filter for it. Basically, I have one caller token transaction. Um, or let's say I'm just going to take DAO. Probably easier. Take the DAO token. Take the DAO token. I have a bunch of these DAO tokens. And I think, okay, man, the price actually was wrong for these. I want to correct it. Or maybe there was no price. There's a price now, but maybe I want to like correct it. So, what I could do is I could select pretty much the entire DAO page and I could kind of start to get super picky in terms of where I want to change the price. So I'll go to manage and I'll go to uh update token price and I'll go to manual and I'll say something like after let's say January 2023 the first I'll say actually in that period the entire token price should have been \$1. And I'll go ahead and hit update and then you'll see it updated after the 2023. Here's the token. Here's the new fiat amount. I kind of updated it to match that new price that I added. So you can do that for tokens pretty much that have zero value that aren't listed yet or maybe they have a price and you want to change the price. So this is kind of a feature to quickly change basically token prices amount like within tokens. The alternative is also you can go directly in the transaction and you can alter the fiat amount of the token price but of the token of the fiat amount but that takes a lot longer. That's just kind of like a quick and easy way uh to do it. All right, cool. Let me know if you have any questions.
# Adding Opening Balances
Source: https://learn.breezing.io/advanced-features/opening-balances
Learn how to add opening balances in Breezing manually or by CSV upload so your crypto books start from accurate balances on your chosen date.
If you are migrating to Breezing from another subledger or starting your accounting partway through a wallet's history, you do not need to pull in years of irrelevant historical transactions. Instead, you can simply inject an **Opening Balance** for a specific date (e.g., Jan 1st).
### Method 1: Adding Opening Balances Manually
*Best if you only have a few assets to start with.*
1. Navigate to the **Wallets** page and select the wallet you want to add balances to.
2. Click **Add Transaction**.
3. Fill out the transaction details:
* **Hash/ID:** Type something clear like `Opening Balance 2024`.
* **Date:** Select the start date of your accounting period (e.g., `Jan 1, 2024`).
* **Direction:** `Inbound`.
* **Asset:** The token ticker (e.g., `ETH`).
* **Amount:** The exact token amount held on that date (e.g., `2.0`).
* **FIAT Amount:** Enter the exact historical fiat cost basis from your *accounting system* (do not rely on live spot prices for opening balances).
* **Type:** Write `Opening Balance`.
4. Click **Add**. The balance will immediately reflect in your wallet.
### Method 2: Bulk Upload via CSV
*Best if you have dozens of tokens or multiple wallets to initialize.*
1. On the **Wallets** page, click the wallet and select **Upload CSV**.
2. Download the Breezing CSV template.
3. Fill out the template rows for each asset you hold:
* **Date:** `01/01/2024` (Ensure Excel formatting matches the template!)
* **Hash:** `Opening Balance 2024`
* **Direction:** `IN`
* **Asset:** `USDC`, `ETH`, etc.
* **Amount:** The token balance.
* **Amount FIAT:** Your historical cost basis from your general ledger.
* **Type:** `Opening Balance`
4. Leave the fee columns blank.
5. Save the CSV and upload it to Breezing.
Your wallet will instantly populate with all the correct opening balances and historical cost basis figures, giving you a clean slate to start calculating from!
All right, guys. So, in this video, we're going to show you how to add opening balance. It's pretty simple. Go ahead and click on the wallet you want to add an opening balance for. Let's call it ops wallet. Just come down here. Go ahead and hit add transaction. You're going to add add transaction here. You're going to write things like opening balance 2024, let's say. And I'm going to call this one ETH. And then I'm going to select, let's say, the opening balance starting on January 1st, 2024. A second here. I'm going to select pretty much direction inbound the token. I'm gonna do ETH amount. I'll do two ETH. I'm going to say they're worth maybe 3500. Again, this is the amount that you have on January 1st, 2024. And it's also this is the fiat amount that you typically have in your accounting system, not the one maybe in your other subleddger or where else you're using. Choose kind of like the fee token. Just call it ETH. You can leave these as zero. And then type. You just kind of write opening balances. One second. And then once you're done, go ahead and click add. and it'll be added just right over here. And then you can kind of see here Ethereum you can update the token balance and it'll be reflected e that token balance is now changed. If you have many let's say um opening balance you need to book the best way to do is do it via CSV. Go ahead and click here upload CSV download it. Go ahead and open it up. Got to bring it over here. Again it's kind of the same logic that you're doing. You're pretty much just selecting the date. Again you're going let's say 2024. Oh 01 01 you're calling this one opening balance 2024 inbound ETH ETH again do two then here I would do 3500 which is the fiat amount you can leave these ones as blank and then kind of put this one as opening balance then go ahead and kill that like that you need one line you can add multiple now so you can go ahead and say okay now my next one I'm going to do USDC I had like 5,000 USDC and maybe my accounts in 5,000. So yeah, you kind of just do them all the way down pretty much until you have what you need. And then you just go ahead and uh make sure the uh the date also formats. So make sure you got this date format here. So go ahead and click that. Go ahead and pretty much just format the cells, throw in the date, go ahead and save the CSV, and then just upload away. There you go. It's done. Let me know if that helps. Looking forward to kind of working with you more. Thanks.
# Roll Up Transactions
Source: https://learn.breezing.io/advanced-features/roll-up-transactions
Compress thousands of micro-transactions (like staking rewards) into single daily or monthly journal entries.
If you are dealing with high-frequency crypto activity (such as mining payouts, staking rewards, or micro-transactions), your ledger can quickly become bloated with hundreds of thousands of lines. Syncing 100,000 micro-transactions to Xero or QuickBooks will severely lag or crash your accounting software.
Breezing allows you to cleanly "Roll Up" these transactions into summarized blocks before syncing.
### How to Roll Up High-Volume Transactions
1. On your **Dashboard**, use the **Filter** menu to isolate the transactions you want to compress.
* *Example:* Filter for a specific token (e.g., `ETH`) and direction (`Inbound`), to isolate all inbound ETH staking rewards.
2. Select all the filtered transactions using the bulk-select checkbox.
3. Click the **Manage** dropdown menu at the top of the list.
4. Select **Consolidate Transactions (Roll up)**.
5. Choose your aggregation timeframe:
* **By Day:** Combines all selected transactions that occurred on the same calendar day into one entry.
* **By Month:** Combines all selected transactions that occurred in the same calendar month into one entry (Recommended for massive volume).
6. *(Optional)* Choose whether to group them by Contact.
7. Click to confirm.
Breezing will instantly condense the ledger. Instead of 100,000 individual micro-deposits, you will now see just one clean, summarized inbound transaction per month (or day) containing the total summed token amount and fiat value, ready to sync effortlessly to your accounting software!
all right the next thing I'm going to show you is like rollup transactions let's say you got like a bunch of like like millions or like 100,000 like inbound transactions that are related to Rewards or whatever it might be you can kind of filter for the tokens filter for inbound you can filter for it here you can then select all and then you could kind of like click down here is a rollup transaction button you can click that and you can select how you want to roll it up by day or by month whatever is you want to do so I'll just do by month I won't group it by contact I'll just kind of like roll it up and so what it's going to do is it's going to give you one transaction per month completely rolled up for the entire uh Prett much token all INB it'll show you also the Roll Up by month so that's a great feature if you have like 100,000 all the same transaction you just want to see it all in one big bulk of transaction it'll roll it up it'll sum it up kind of on a monthly basis or on a daily basis whatever you choose but yeah great feature great thing to use if you kind of want to condense um I'd say your uh your environment and make it a little more easier to work cool
# Detailed vs. Compressed Journals
Source: https://learn.breezing.io/advanced-features/rolled-up-detailed
Toggle between a highly detailed, multi-line journal entry or a compressed, accountant-friendly journal entry format.
By default, when Breezing pushes a journal entry to your accounting software (like Xero or QuickBooks), it splits out the debits and credits into a highly detailed, multi-line format. This explicitly separates the principal amount, the network fee, and the realized gain/loss into distinct line items.
However, some technical accountants prefer a tighter, more traditional "Compressed" journal view.
### How to Switch to Compressed Journals
1. Click your **Company Name** in the top left corner of Breezing.
2. Select **Settings**.
3. Locate the toggle for **Tom DeFi Mode** (our compressed journal mode).
4. Enable the toggle and click **Update**.
5. Return to your Dashboard.
If you have already synced a detailed journal to Xero/QuickBooks and want to change it to the compressed format, you do *not* need to delete it. Simply click **Sync** on the transaction again in Breezing, and it will instantly overwrite the detailed journal in your accounting software with the new compressed, accountant-friendly layout!
so in breezing you actually have the option to do a compressed journal entry or kind of a detailed Journal I'll just kind of show you what that looks like so I'm going to go ahead and hit this legal expense one so this one's I've already synced I'm going to go ahead and click the view Journal so I can see what it looks like so you'll see this journal it's got amounts twice fees and the necking law so it breaks it all up very kind of detailed and it shows the debits credits it's a long Journal but it breaks it up it's really much kind of a simplified view but if you want a more compressed View and maybe a view that like more technical counts more used to go back into breezing go to the name click settings click the Tom defi mode hit update go back into the transaction that legal expense transaction right over here go into here and just resync that transaction so you resync that transaction it's going to show it to you in a different view now keep in mind this was the view initially now I'm going to refresh this it's going to change the view so bear with me the view now changes in a more compressed version so you have now the fair value cost bases fee and the gain and loss in kind of a more compressed view this is a journal that maybe more technical accounts are used to but you could definitely use either one it's that's kind of what you're most familiar with all right cool
# Avoid Gains/Losses on Staking & LPs
Source: https://learn.breezing.io/advanced-features/staking
Learn how to prevent staking, bridging, and liquidity pool transactions from affecting your cost basis.
When you send tokens to a staking contract, liquidity pool, or bridge, you are often just moving your own assets around rather than realizing a taxable event or a true disposal. In Breezing, you can flag these specific transactions so they do not trigger a capital gain/loss or alter your running cost basis.
### How to Skip Gains & Losses
1. On your **Dashboard**, click into the transaction you want to exclude (e.g., an outbound transfer to a staking contract).
2. Scroll down in the transaction details panel.
3. Toggle the **Skip Net Gain/Loss** switch.
4. Enter a **Reason** in the text field (e.g., `Staking`, `Liquidity Pool`, or `Bridging`). This leaves a clear audit trail.
5. Click **Save**.
Breezing will now ignore this specific transaction when you run the global Gain/Loss calculator, ensuring your cost basis remains completely intact. *(Note: Do not use the "Internal Transfer" tag for these events; use this dedicated toggle instead).*
All right. So, for this next video, I'm going to show you what happens if you have a transaction that's like a staking rewards or maybe you're bridging or maybe you're wrapping something and you want the system to not calculate gains and losses and to basically not affect the cost basis of that token in the future basically. So, that's really common like liquidity pool or staking. So, for example, let's say I have this transaction 250. I kind of come down here. It says skip gains and losses. So, I'm going to toggle that and I'm going to give it a reason. I can say staking. I can say liquidity pool kind of whatever the reason is. It's pretty much just going to tell the system, hey, skip this for gains and losses and don't change my cost base. You save it and that's all you need to do. So, you don't see kind of signify as an internal anymore. That's kind of the new toggle to use. Let me know if you have any questions.
# Applying VAT/Sales Tax
Source: https://learn.breezing.io/advanced-features/vat-transactions
Learn how to record VAT or Sales Tax directly on your crypto transactions before syncing to your ledger.
If you operate in a jurisdiction where VAT (Value Added Tax) or Sales Tax applies to specific crypto transactions (e.g., recognizing output VAT on mining or staking rewards, or paying VAT on consulting invoices paid in stablecoins), Breezing allows you to apply tax codes directly to the transaction.
### How to Apply a VAT/Tax Code
1. On your **Dashboard**, click into the transaction you want to apply tax to.
2. Scroll down to the **VAT** field in the transaction details panel.
3. Enter your specific tax code or percentage (e.g., `Output 8.1% VAT` or a specific tax code string used by your accounting software).
4. Click **Save**.
### How it Syncs to Your Ledger
When you sync this transaction to Xero or QuickBooks (or export it as a CSV Journal), Breezing will automatically pass the VAT code along with the journal entry.
This allows you to mix transactions (some with VAT applied and some marked as VAT Exempt) in the same bulk sync, ensuring your accounting software calculates the tax liability correctly on its end!
all right cool now within breezing um if you're doing maybe more yeah cach basis or you want to kind of uh maybe just record directly in breezing the vat you can totally do that so in breezing there's actually a field for vat click down here um it's over here basically so you can say okay maybe this was like I'm just going to use Swiss vat rates just to make it simple this was like output vat output 8.1% vat and I can do a specific code if I wanted to uh but I don't really have one right now do yo I'll hit save pretty much and then kind of with that one what I'll do is I'll just kind of like find it again so here it is and then kind of when you produce the journal it'll produce it with the vat code that you just added so this is great pretty much if you have like a a lot of inbound rewards so here it is with the V code output 8.11 so it kind of like separates out the two so it show you the ones maybe that have vat and the ones that don't so I'll just kind of show you just a quick difference I'll just kind of like download the journals group like that you'll see one transaction has vat and the other one doesn't so you'll see kind of like the mix here where vat exempt is some of them and some of them are Vat related so yeah that's something to kind of keep in mind uh kind of how you can use and apply vat and breezing it's great if you have like a lot of rewards and you know you want to add like let's say output vat to all them or maybe you have a specific wallet where you're collecting output vat and you want to kind of Mark them all like that that totally works as well well but that's kind of like a vat field for anyone kind of in Europe that has to kind of continue to do that or even sales tax related in the US you can also use that field as well cool
# Wallet Folders
Source: https://learn.breezing.io/advanced-features/wallet-folders
Organize wallets into folders in Breezing to group entities, clients, or strategies, then filter transactions and rules by folder.
Once a company has more than a handful of wallets, a flat list stops working. Folders let you group wallets the way you think about them: by entity, by purpose (Treasury, Operations, Staking), or by custody location, and then filter and automate against those groups.
### Creating a Folder
1. Navigate to the **Wallets** page.
2. Click **Add Folder**.
3. Name the folder and click **Add**. Folder names must be unique within the company.
### Assigning Wallets to Folders
Select one or more wallets with the checkboxes on the Wallets page and open the batch edit dialog. Pick the target folder from the **Folder** dropdown and save; pick **No Folder** to remove wallets from their current folder. The Wallets table shows each wallet's folder in its own column, so you can see the grouping at a glance.
A wallet can belong to one folder at a time.
### Using Folders
Folders earn their keep outside the Wallets page:
* **Transaction filters**: the Dashboard filter panel has a **Folders** multi-select, so you can view all activity for one entity or strategy across its wallets in a single filtered view.
* **Automation rules**: [Rules V2](/features/automation-rules) can match on Folders, which means one rule can cover a whole group of wallets and automatically applies to wallets you add to the folder later. "Everything in the Staking folder skips gain/loss" is one rule instead of ten.
* **Bulk workflows**: filtering by folder before batch operations (locking a period per entity, exporting one client's journals) keeps multi-entity workspaces tidy.
### A Structure That Scales
A pattern that works well for accountants managing several clients or entities in one company workspace:
1. One folder per entity or client.
2. Rules keyed on folders rather than individual wallets.
3. New wallet arrives: assign it to its folder, and the existing filters and rules pick it up without any further setup.
# Get Active Issues API
Source: https://learn.breezing.io/api-reference/active-issues/get-active-issues
GET /active-issues
Retrieve Breezing active issues blocking the close such as uncategorized transactions, missing prices, and broken syncs for crypto accounting.
# Refresh Active Issues API
Source: https://learn.breezing.io/api-reference/active-issues/refresh-active-issues
POST /active-issues/refresh
Recompute Breezing active issues to refresh uncategorized transactions, missing prices, and broken syncs in your crypto accounting close.
# List Assets API
Source: https://learn.breezing.io/api-reference/assets/list-assets
GET /assets
Retrieve Breezing token assets with cursor pagination, spam filtering, and GL account mappings for crypto accounting workflows.
# Update Asset API
Source: https://learn.breezing.io/api-reference/assets/update-asset
PATCH /assets/{id}
Update Breezing asset mappings and spam status by ID to keep token accounting rules accurate across crypto accounting workflows.
# Calculate Balances API
Source: https://learn.breezing.io/api-reference/balances/calculate-balances
POST /balances/calculate
Recompute Breezing token balances across wallets and dates to refresh aggregated holdings and fiat values for crypto accounting.
# Get Balances API
Source: https://learn.breezing.io/api-reference/balances/get-balances
GET /balances
Retrieve aggregated Breezing balances with wallet and date filters to review token holdings and fiat values in crypto accounting.
# Refresh Bexio Accounts API
Source: https://learn.breezing.io/api-reference/bexio/refresh-bexio-accounts
POST /bexio/accounts/refresh
Pull the latest Bexio chart of accounts into Breezing so crypto journal entries can sync against the current account codes, names, and types.
# Sync to Bexio API
Source: https://learn.breezing.io/api-reference/bexio/sync-bexio
POST /bexio/sync
Sync Breezing crypto transactions to Bexio as journal entries to keep accounting books up to date with on-chain activity.
# List Companies API
Source: https://learn.breezing.io/api-reference/companies/list-companies
GET /companies
List Breezing companies your API key can access with org IDs, currencies, and read or write access levels for crypto accounting workflows.
# Get Company API
Source: https://learn.breezing.io/api-reference/company/get-company
GET /company
Retrieve Breezing company accounting settings, chart of accounts, currency, and integration status for crypto accounting workflows.
# Update Company API
Source: https://learn.breezing.io/api-reference/company/update-company
PATCH /company
Update Breezing company accounting settings, including cost-basis method, balance sheet setup, and default fee, gain, and loss account mappings via the API.
# Create Contact API
Source: https://learn.breezing.io/api-reference/contacts/create-contact
POST /contacts
Create a Breezing contact to label a counterparty address with a name and chain for clearer crypto accounting reports and workflows.
# Get Contact API
Source: https://learn.breezing.io/api-reference/contacts/get-contact
GET /contacts/{id}
Retrieve a single Breezing contact by ID to inspect counterparty name, address, chain, and QuickBooks entity for crypto accounting workflows.
# List Contacts API
Source: https://learn.breezing.io/api-reference/contacts/list-contacts
GET /contacts
Retrieve Breezing contacts with cursor pagination and search by name or address to label crypto counterparties in accounting workflows.
# Update Contact API
Source: https://learn.breezing.io/api-reference/contacts/update-contact
PATCH /contacts/{id}
Update a Breezing contact name, chain, or QuickBooks entity by ID to keep counterparty labels accurate across crypto accounting workflows.
# Breezing API Reference
Source: https://learn.breezing.io/api-reference/introduction
Learn how to use the Breezing API for crypto accounting workflows across companies, transactions, wallets, contacts, reports, rules, and more.
The Breezing Public API gives you programmatic access to your crypto accounting data. Use it to build custom integrations, automate workflows, or connect AI agents to your Breezing workspace.
### Authentication
All API requests require a Bearer token in the `Authorization` header. API keys use the `brz_` prefix.
```bash theme={null}
curl -H "Authorization: Bearer brz_your_api_key" \
https://api.breezing.io/v1/companies
```
Each API key carries a per-company **access level**: `read` (GET requests only) or `write` (GET, POST, and PATCH). The API exposes no DELETE operations; use the Breezing dashboard for destructive actions. Calls to write endpoints with a read-only key return `403 FORBIDDEN`.
### Creating an API Key
API keys are managed at the user level. A single key can span multiple companies with specific `read` or `write` access per company.
To create one, open the profile menu in the top-right corner and select **Account Settings**:
Then open the **API Keys** tab and click **Create API Key**:
Copy your API key immediately after creation. It won't be shown again. Use the `brz_` prefixed key as a Bearer token in all API requests.
### Base URL
All endpoints are served from:
```
https://api.breezing.io/v1
```
### Finding orgId and companyId
Every endpoint except `GET /companies` requires `orgId` and `companyId` as query parameters. Start by calling `GET /companies` to list every company your API key can access. Each entry returns its `id`, `orgId`, and `accessLevel`.
```bash theme={null}
curl -H "Authorization: Bearer brz_your_api_key" \
https://api.breezing.io/v1/companies
```
Then pass those IDs on every other call:
```bash theme={null}
curl -H "Authorization: Bearer brz_your_api_key" \
"https://api.breezing.io/v1/company?orgId=1&companyId=1"
```
Calls missing `orgId` or `companyId`, or using IDs your API key isn't assigned to, return `400 BAD_REQUEST` or `403 FORBIDDEN`.
### Rate Limits
The Breezing API currently allows up to `600 requests per minute`. If you hit the limit, back off briefly and retry your request.
### Pagination
`GET /transactions`, `GET /assets`, `GET /contacts`, `GET /reports`, and `GET /rules` use **cursor-based pagination**:
* `cursor`: the ID of the last item from the previous page (omit for the first page)
* `limit`: number of items to return per page (1 to 100)
The response includes a `pagination` object:
* `pagination.limit`: number of records requested
* `pagination.cursor`: the cursor value for the current page, or `null`
* `pagination.hasMore`: whether another page of results is available
### Long-Running Operations
Some endpoints start a background job instead of returning the result immediately: `POST /transactions`, `POST /transactions/update-price-auto`, `POST /wallets`, `POST /wallets/{id}/sync`, `POST /balances/calculate`, `POST /ngl/calculate`, `POST /active-issues/refresh`, and `POST /rules/apply`. Each job appears as a row in `GET /tasks`. `POST /transactions`, `POST /transactions/update-price-auto`, `POST /wallets`, and `POST /rules/apply` also return the `taskId` directly in the response.
While a job is already running for the same company or wallet, a duplicate call returns `409` with a `TASK_IN_PROGRESS` code. The exception is `POST /wallets`: creating another wallet is always allowed, since each call targets a new wallet. Check `GET /tasks` before starting a new run, and again before reading derived data such as balances or reports, since overlapping runs can corrupt computed state.
The accounting sync endpoints (`POST /xero/sync`, `POST /qbo/sync`, and `POST /bexio/sync`) run synchronously and respond once the journals are accepted or rejected, but they also return `409 TASK_IN_PROGRESS` while a dashboard-initiated batch sync is running for the company.
The report endpoints (`POST /reports/token`, `POST /reports/account`, `POST /reports/explorer-balances`, and `POST /reports/{id}/regenerate`) also run in the background and return the report and task IDs immediately, but parallel report creation is allowed, so they skip the duplicate-run guard. Poll `GET /tasks` or `GET /reports/{id}` until the report leaves `pending`/`progress`, and avoid re-submitting the same parameters while one is pending. `POST /reports/{id}/regenerate` returns `409` only while that report is still generating.
### Error Responses
Errors return `success: false` and an `error` object with `code` and `message`:
```json theme={null}
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid API key"
}
}
```
| Status Code | Meaning |
| ----------- | ------------------------------------------------------------------------------------------------- |
| 400 | Bad request: invalid parameters or request body |
| 401 | Unauthorized: invalid or missing API key |
| 403 | Forbidden: insufficient access level or no access to company |
| 404 | Not found: resource does not exist |
| 409 | Conflict: a long-running task is already in progress, or the resource is locked or already exists |
| 429 | Too Many Requests: rate limit exceeded |
| 500 | Internal server error |
### Resources
List the companies your API key can access. Start here to find org and company IDs.
Retrieve a company's accounting configuration and chart of accounts, or update its accounting settings.
Create, list, filter, count, update, group, consolidate, reprice, and lock or unlock crypto transactions, with a per-transaction edit history.
View connected wallets and exchange accounts, create chain wallets, and trigger incremental syncs.
Browse token assets and manage their GL account mappings.
Get aggregated token balances across wallets with fiat valuations.
Label counterparty addresses with names to clarify transaction parties.
Surface uncategorized transactions, missing prices, and broken syncs blocking the close.
Generate, regenerate, and inspect Breezing reports for token, account, and explorer balance reconciliation.
Manage automation rules that auto-categorize transactions based on conditions.
Track active background tasks like wallet syncs, report generation, and rule application.
Recompute realized and unrealized net gain or loss across crypto transactions.
Refresh Xero accounts, categories, and invoices, create a new account, list and book invoice payments, submit gain/loss journals, and sync crypto transactions as journal entries.
Refresh QuickBooks accounts, classes, and entities, create a new account, and sync crypto transactions as journal entries.
Refresh Bexio accounts and sync crypto transactions as journal entries.
# Calculate Net Gain/Loss API
Source: https://learn.breezing.io/api-reference/ngl/calculate-ngl
POST /ngl/calculate
Recompute Breezing realized and unrealized net gain or loss across crypto transactions using the company's cost basis method.
# Create QuickBooks Account API
Source: https://learn.breezing.io/api-reference/qbo/create-qbo-account
POST /qbo/accounts
Create a new QuickBooks account from Breezing to add a destination for crypto journal entries without leaving the API workflow.
# Refresh QuickBooks Accounts API
Source: https://learn.breezing.io/api-reference/qbo/refresh-qbo-accounts
POST /qbo/accounts/refresh
Pull the latest QuickBooks chart of accounts into Breezing so crypto journal entries can sync against the current account codes, names, and types.
# Refresh QuickBooks Classes API
Source: https://learn.breezing.io/api-reference/qbo/refresh-qbo-classes
POST /qbo/classes/refresh
Pull the latest QuickBooks classes into Breezing so crypto journal entries can be tagged by department, location, or other tracking dimension.
# Refresh QuickBooks Entities API
Source: https://learn.breezing.io/api-reference/qbo/refresh-qbo-entities
POST /qbo/entities/refresh
Pull the latest QuickBooks Vendors, Customers, and Employees into Breezing so crypto counterparties can be tagged on synced journal entries.
# Sync to QuickBooks API
Source: https://learn.breezing.io/api-reference/qbo/sync-qbo
POST /qbo/sync
Sync Breezing crypto transactions to QuickBooks Online as journal entries to keep books up to date with on-chain activity.
# Create Account Report API
Source: https://learn.breezing.io/api-reference/reports/create-account-report
POST /reports/account
Generate a Breezing account report showing balance sheet movements by GL account for the period, with opening balances, debits, and credits.
# Create Explorer Balances Report API
Source: https://learn.breezing.io/api-reference/reports/create-explorer-balances-report
POST /reports/explorer-balances
Generate a Breezing explorer balances report comparing computed wallet balances against live chain explorer data to flag mismatches.
# Create Token Report API
Source: https://learn.breezing.io/api-reference/reports/create-token-report
POST /reports/token
Generate a Breezing token report with per-token gain/loss, opening and closing balances, and fiat figures for the period, across all chains.
# Get Report API
Source: https://learn.breezing.io/api-reference/reports/get-report
GET /reports/{id}
Retrieve a single Breezing crypto accounting report by ID to inspect status, progress, date range, wallets, tokens, and chains.
# Get Report Details API
Source: https://learn.breezing.io/api-reference/reports/get-report-details
GET /reports/{id}/details
Retrieve computed Breezing report rows by token, account, or explorer balances to reconcile crypto accounting balances and movements.
# List Reports API
Source: https://learn.breezing.io/api-reference/reports/list-reports
GET /reports
Retrieve Breezing crypto accounting reports with cursor pagination, status, type, and progress to monitor token, account, and balance reports.
# Regenerate Report API
Source: https://learn.breezing.io/api-reference/reports/regenerate-report
POST /reports/{id}/regenerate
Re-run an existing Breezing report with its stored parameters after recalculating gains or importing transactions to refresh its data.
# Apply Rules API
Source: https://learn.breezing.io/api-reference/rules/apply-rules
POST /rules/apply
Retroactively apply Breezing automation rules to existing unlocked crypto transactions in a background task and poll progress for completion.
# Create Rule API
Source: https://learn.breezing.io/api-reference/rules/create-rule
POST /rules
Create a Breezing automation rule with conditions and actions to categorize new crypto transactions automatically across accounting workflows.
# Get Rule API
Source: https://learn.breezing.io/api-reference/rules/get-rule
GET /rules/{id}
Retrieve a single Breezing automation rule by ID to inspect conditions, actions, and active status for crypto accounting categorization.
# List Rules API
Source: https://learn.breezing.io/api-reference/rules/list-rules
GET /rules
Retrieve Breezing automation rules with cursor pagination and search to review the conditions and actions used in crypto accounting workflows.
# Update Rule API
Source: https://learn.breezing.io/api-reference/rules/update-rule
PATCH /rules/{id}
Update a Breezing automation rule by ID to adjust conditions, actions, or active status without re-applying it to existing crypto transactions.
# List Tasks API
Source: https://learn.breezing.io/api-reference/tasks/list-tasks
GET /tasks
Retrieve active Breezing background tasks like wallet syncs, report generation, and rule application to track progress in crypto accounting.
# Batch Update Transactions API
Source: https://learn.breezing.io/api-reference/transactions/batch-update-transactions
PATCH /transactions
Update Breezing transactions in bulk with one API request to apply accounting field changes across unlocked crypto accounting records.
# Count Transactions API
Source: https://learn.breezing.io/api-reference/transactions/count-transactions
GET /transactions/count
Retrieve filtered transaction counts from the Breezing API to measure crypto accounting activity before listing or updating transactions.
# Create Transactions API
Source: https://learn.breezing.io/api-reference/transactions/create-transactions
POST /transactions
Create up to 500 Breezing transactions in a single wallet API request, with automatic contact, asset, and internal-transfer detection.
# Get Transaction API
Source: https://learn.breezing.io/api-reference/transactions/get-transaction
GET /transactions/{id}
Retrieve a single Breezing transaction by ID to inspect crypto accounting fields, status, and wallet-linked transaction details.
# Get Transaction History API
Source: https://learn.breezing.io/api-reference/transactions/get-transaction-history
GET /transactions/{id}/history
Retrieve the audit trail of a Breezing transaction: who edited it, when, and the previous field values for the latest manual and system edits.
# Group Internal Transactions API
Source: https://learn.breezing.io/api-reference/transactions/group-internals
POST /transactions/group-internals
Group two or more Breezing transactions into one internal transfer with a single API request, assigning a shared internal ID across the legs.
# Group Transactions Into Trades API
Source: https://learn.breezing.io/api-reference/transactions/group-trades
POST /transactions/group-trades
Group Breezing transactions into trades through the API, pairing opposite buy and sell legs into linked trade pairs as the dashboard action does.
# List Transactions API
Source: https://learn.breezing.io/api-reference/transactions/list-transactions
GET /transactions
Retrieve Breezing transactions with filters, cursor pagination, and accounting fields for crypto accounting automation and review workflows.
# Lock Transactions API
Source: https://learn.breezing.io/api-reference/transactions/lock-transactions
POST /transactions/lock
Lock Breezing transactions through the API to close an accounting period, keeping computed gain or loss figures fixed and blocking edits.
# Consolidate Transactions API
Source: https://learn.breezing.io/api-reference/transactions/roll-up
POST /transactions/roll-up
Consolidate Breezing transactions into daily or monthly summary rows with the roll-up API, merging amounts, fees, and fiat values per token.
# Unlock Transactions API
Source: https://learn.breezing.io/api-reference/transactions/unlock-transactions
POST /transactions/unlock
Unlock previously locked Breezing transactions through the API to reopen a closed accounting period and make records editable again.
# Update Token Prices API
Source: https://learn.breezing.io/api-reference/transactions/update-price-auto
POST /transactions/update-price-auto
Recompute fiat values for Breezing transactions with the automatic price update API, using historical market, custom, or on-chain token prices.
# Update Transaction API
Source: https://learn.breezing.io/api-reference/transactions/update-transaction
PATCH /transactions/{id}
Update a single unlocked Breezing transaction by ID to patch crypto accounting fields without changing other transaction values.
# Create Wallet API
Source: https://learn.breezing.io/api-reference/wallets/create-wallet
POST /wallets
Create a Breezing blockchain wallet with auto chain detection and a date range to start syncing transactions for crypto accounting workflows.
# Get Wallet API
Source: https://learn.breezing.io/api-reference/wallets/get-wallet
GET /wallets/{id}
Retrieve a single Breezing wallet by ID to inspect wallet details for exchange, blockchain, or bank crypto accounting records.
# List Wallets API
Source: https://learn.breezing.io/api-reference/wallets/list-wallets
GET /wallets
Retrieve Breezing wallets, exchange accounts, blockchain addresses, and bank accounts to support crypto accounting integrations.
# Sync Wallet API
Source: https://learn.breezing.io/api-reference/wallets/sync-wallet
POST /wallets/{id}/sync
Trigger an incremental or custom period Breezing wallet sync to pull blockchain or exchange transactions for accounting reconciliation.
# Create Xero Account API
Source: https://learn.breezing.io/api-reference/xero/create-xero-account
POST /xero/accounts
Create a new Xero account from Breezing to add a destination for crypto journal entries without leaving the API workflow.
# List Xero Payments API
Source: https://learn.breezing.io/api-reference/xero/list-xero-payments
GET /xero/payments
List payments already booked in Xero for a Breezing transaction. Check this before submitting a payment to avoid duplicate Xero entries.
# Refresh Xero Accounts API
Source: https://learn.breezing.io/api-reference/xero/refresh-xero-accounts
POST /xero/accounts/refresh
Pull the latest Xero chart of accounts into Breezing so crypto journal entries can sync against the current account codes, names, and types.
# Refresh Xero Tracking Categories API
Source: https://learn.breezing.io/api-reference/xero/refresh-xero-categories
POST /xero/categories/refresh
Pull the latest Xero tracking categories into Breezing so crypto journal entries can be tagged by department, region, or other reporting dimension.
# Refresh Xero Invoices API
Source: https://learn.breezing.io/api-reference/xero/refresh-xero-invoices
POST /xero/invoices/refresh
Pull outstanding Xero invoices into Breezing so invoice pickers and payment submission flows always work from the latest approved list.
# Submit Xero Gain/Loss Journal API
Source: https://learn.breezing.io/api-reference/xero/submit-xero-ngl
POST /xero/ngl
Book a manual journal in Xero with only the net gain/loss lines of a Breezing transaction, using the company's gain and loss account mappings.
# Submit Xero Payment API
Source: https://learn.breezing.io/api-reference/xero/submit-xero-payment
POST /xero/payments
Book a payment in Xero for a Breezing transaction, either against an outstanding invoice or as a standalone spend or receive money entry.
# Sync to Xero API
Source: https://learn.breezing.io/api-reference/xero/sync-xero
POST /xero/sync
Sync Breezing crypto transactions to Xero as journal entries to keep books up to date with on-chain activity.
# Account Report
Source: https://learn.breezing.io/features/account-report
Generate an account report in Breezing to see debits, credits, and closing balances per GL account and reconcile against Xero or QuickBooks.
The account report shows your crypto activity the way your trial balance does: grouped by general ledger account, with opening balances, period debits and credits, and closing balances. It is the fastest way to tie Breezing out against your accounting system at period end.
### Creating an Account Report
1. Navigate to **Reports** and click **New Report**.
2. Set the report type to **Account**.
3. Pick your **From** and **To** dates, typically the period you are closing.
4. If your company is connected to Xero or QuickBooks, you can enable **Reconcile against** your platform. Breezing will pull the closing balance per account from your accounting system and compare it side by side.
5. Create the report. Generation runs in the background; the report opens from the Reports list when it is done.
### Reading the Report
For every general ledger account with activity, the report shows:
* **Opening Balance Debits** and **Opening Balance Credits**: the account position at the start of the period.
* **Debits** and **Credits**: activity during the period.
* **Closing Balance Debits** and **Closing Balance Credits**: opening plus period activity.
* **Closing Balance**: the net position of the account.
With reconciliation enabled, three more columns appear:
* Your platform's closing balance for the account (from Xero or QuickBooks).
* **Variance**: the difference between Breezing's closing balance and your platform's.
* A status per account: **Matched**, **Mismatch**, **Missing in** your platform, or **Missing in Breezing**.
A mismatch usually means unsynced transactions, journal entries created outside Breezing, or a mapping difference. The two "missing" statuses point at accounts that exist on one side only, which typically means the chart of accounts needs a [refresh](/advanced-features/add-account-to-coa).
### Exporting and Managing
* **Download CSV** exports the full table for your workpapers.
* **Regenerate** recomputes the report with its original parameters, useful after you fix data or sync more journals.
* **Delete** removes the report; it does not touch any transactions.
For token-level and wallet-level reporting, see [Reporting & Exporting](/features/pull-breezing-report).
# Active Issues
Source: https://learn.breezing.io/features/active-issues
Breezing scans your wallets for data issues like missing fiat prices, wrong accounts, and duplicates so you can fix them before syncing.
Even with clean imports, crypto data accumulates problems: a token with no fiat price, an internal transfer missing its pair, an account assigned to the wrong side of a transaction. The Active Issues panel scans your data for these problems and turns them into a fix-list, so you catch them before they reach your ledger.
### Where to Find It
Open any wallet from the **Wallets** page. The **Active Issues** card sits on the wallet details page and shows every detected issue type with a count badge. The card also shows when the scan last ran ("Last refreshed"). When everything is clean, you'll see "No issues found."
### Running a Scan
Click **Refresh** on the card. Breezing scans the company's transactions in the background (you can keep working; the scan appears under **Running tasks**). Only one scan can run at a time per company, so if a teammate already started one, wait for it to finish.
Issues do not clear themselves when you fix the underlying data; run **Refresh** again after your fixes to confirm the counts went to zero.
### Working Through Issues
Click any issue in the list and Breezing filters the transaction table to exactly the affected transactions. Hover over an issue to see the suggested fix.
The checks cover:
| Issue | What it means |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| Missing Fiat Amount | The transaction has a token amount but no fiat value. Fix with [Update FIAT Prices](/features/update-fiat-prices). |
| Missing Fee Fiat Amount | The fee has no fiat value assigned. |
| Missing Transaction Account | No general ledger account is assigned yet. |
| Wrong Transaction Account Selected | The transaction account duplicates the asset account, so both journal legs would hit the same account. |
| Wrong Asset Account Selected | The asset account does not match your balance sheet mapping. |
| Wrong Fee Asset Account Selected | The fee asset account does not match your balance sheet mapping. |
| Transaction Currency Mismatch | The transaction currency differs from your company's base currency. |
| Transaction Needs Review | Transactions flagged as review required, for example through the [client review workflow](/features/client-review). |
| Missing Internal ID | An internal transfer is missing the ID that pairs it with its other side. |
| Internal Has Zero Token Amount | An internal transaction has a zero token amount. |
| 'IN' internal transaction's date is not after 'OUT' | An internal pair's inbound side is dated before its outbound side. |
| Trade marked as Spam | A transaction that belongs to a trade is flagged as spam. |
| Fee on Inbounds (in) | An inbound transaction carries a fee, which is usually wrong outside of trades. |
| Token Amount Positive on Outbound (out) | An outbound amount has the wrong sign. |
| Token Amount Negative on Inbound (in) | An inbound amount has the wrong sign. |
| Negative Balance Reached | A token's running balance went below zero at some point, a sign of missing transactions. |
| Potential Duplicate Transactions | Multiple transactions share the same date, direction, token, amounts, and counterparties. |
### A Practical Pre-Sync Routine
1. Import or refresh your wallets for the period.
2. Open a wallet and click **Refresh** on the Active Issues card.
3. Work through each issue, starting with missing accounts and missing fiat amounts, since those directly affect journal quality.
4. Refresh again until the list is clean, then move on to [balance verification](/features/balance-verification) and syncing.
Active Issues are informational: they never block you from working or syncing. They exist to make problems visible while they are still cheap to fix.
# Auto Spam Detection
Source: https://learn.breezing.io/features/auto-spam-detection
Breezing automatically flags spam airdrops and scam tokens so you can filter, review, and unmark false positives.
Crypto wallets are constantly targeted by spam airdrops and scam tokens. Breezing has built-in, automated detection logic.
When spam is detected, the transaction is automatically labeled and hidden from your primary view, keeping your transaction history clean and preventing your accounting software from being bloated with zero-value, malicious token transfers.
### Managing and Filtering Spam
After loading your wallets, it's a good practice to review the spam that Breezing caught to ensure nothing legitimate was accidentally flagged.
1. Navigate to your **Assets** or **Dashboard** view.
2. In the filtering options, look for the Spam dropdown. You have three choices:
* **No Spam**: The default view. Shows only legitimate, clean transactions.
* **Spam Only**: Shows *only* the transactions that Breezing has flagged and hidden.
* **All**: Shows everything, with spam transactions slightly "grayed out" to differentiate them.
3. Click on **Spam Only** to review the list of hidden transactions.
### Unmarking False Positives
If you find a legitimate token or transaction (e.g., a real airdrop you want to recognize as revenue) inside the "Spam Only" view:
1. Click on the transaction.
2. Uncheck the "Spam" toggle to unmark it.
3. Click **Save**.
4. The transaction will immediately turn white (no longer grayed out) and will now appear in your primary "No Spam" dashboard view so you can categorize it normally.
# Automation Rules
Source: https://learn.breezing.io/features/automation-rules
Build automation rules in Breezing to categorize crypto transactions in bulk with conditions, actions, priorities, and a live preview.
Categorizing transactions one by one works fine for a handful of entries, but not for the thousands of similar transactions a typical crypto business generates. Automation Rules let you describe a pattern once (the conditions) and tell Breezing what to do with every transaction that matches it (the actions).
### How Rules Work
You manage rules on the **Rules V2** page in your company dashboard. Each rule has four parts:
1. **Conditions**: which transactions the rule matches. A transaction must satisfy every condition on the rule. When a single condition lists several values (for example, three tokens), matching any one of them is enough.
2. **Actions**: the fields the rule sets on matching transactions, such as the transaction account or a VAT rate.
3. **Order**: the rule's position in the list. Rules apply from top to bottom, and each rule finishes all of its matching transactions before the next one starts.
4. **Active toggle**: inactive rules stay in your list but are skipped when rules are applied.
Rules never touch locked transactions, spam, or transactions that are still being processed, so your closed periods stay closed.
The **Rules V2** page replaces the original **Rules** page, which is marked as deprecated in the sidebar. Existing rules from the old builder have been migrated, and new rules should be created in Rules V2.
### Creating a Rule
1. Navigate to **Rules V2** and click **Add Rule**.
2. Give the rule a clear name (e.g., "Client ABC inbound = Sales"). A short description helps your teammates understand the intent.
3. Add your conditions. Use the search box at the top of the condition panel to jump straight to a field instead of scrolling.
4. Add one or more actions and pick the value for each.
5. Click **Preview**. Breezing shows how many transactions currently match your conditions, along with a sample of up to 15 of them, so you can sanity-check the rule before it touches anything.
6. Click **Save**. Saving stores the rule; it does not apply it yet.
### Conditions You Can Match On
Conditions are grouped into five sections in the rule builder:
* **Transaction**: Direction (in or out), Type, Synced status, Internal flag, Function name (the smart contract method, useful for catching things like `stake` or `addLiquidity` calls), and the Skip Net Gain/Loss flag.
* **Assets**: Tokens, Fee tokens, and Chains.
* **Accounting**: Accounts, Asset accounts, and Fee asset accounts already assigned to the transaction. This is handy for finding transactions that still have no account.
* **Values**: Amount, Amount (FIAT), Fee, Fee (FIAT), Net Gain/Loss, and Cost basis, each with range operators so you can target things like "any transfer above 10,000 USD".
* **Company**: Wallets, Folders, Contacts, and review Status.
Combining sections is where rules get precise. For example: Contacts equals "Blockchain Customer" plus Direction equals "In" matches every inbound payment from that customer, and nothing else.
### Actions You Can Apply
* **Transaction Account**, **Asset Account**, and **Fee Asset Account**: assign general ledger accounts from your chart of accounts.
* **Accounting Description**: set the description that syncs to your journal entries in Xero or QuickBooks.
* **Note** and **Extra label**: add internal context for your team.
* **Status**: set the review status, for example to flag matches for a second look.
* **Internal**: mark or unmark transactions as internal transfers.
* **Value Added Tax (VAT)**: apply a VAT or sales tax rate, as described in [Applying VAT/Sales Tax](/advanced-features/vat-transactions).
* **Skip Net GL** and **Skip Net GL Reason**: exclude matches from gain/loss calculations, the same flag covered in [Avoid Gains/Losses on Staking & LPs](/advanced-features/staking). Pairing a Function name condition with this action is the fastest way to keep staking and bridging out of your cost basis.
* **Custom Price Ref**: link matches to one of your [manual token prices](/advanced-features/manual-token-prices).
* **Xero Tracking Category** and **QuickBooks Class**: these appear as actions once the respective integration is connected, so rules can assign cost centers during categorization.
When setting the **Transaction Account**, you can pick **(auto)** instead of a fixed account. Breezing then resolves the account from your balance sheet mapping, the same logic as the Auto Apply feature described in [Internal Transfers & Trades](/features/internal-transfers). This is the right choice for rules that target transfers between your own wallets.
### Rule Order and Priority
Rules apply sequentially, from the top of the list down. If two rules set the same field on the same transaction, the rule that runs later determines the final value.
A practical way to structure your list:
1. Put broad, catch-all rules near the top (e.g., "everything on the Treasury wallet goes to Digital Assets").
2. Put narrow exceptions further down (e.g., "transfers from the Treasury wallet to Exchange X are internal"). Because the exception runs later, it gets the final say on the transactions where both rules overlap.
You can reorder rules at any time; the order column on the Rules V2 page reflects the sequence.
### Applying Rules
Saved rules do not run on their own. You decide when they run:
* **Apply a single rule** using the apply button on its row. Inactive rules cannot be applied until you activate them.
* **Apply All** runs every active rule in order, top to bottom.
Applying runs as a background task, so you can keep working while Breezing processes the matches. Every change is written to the transaction history with the rule's name attached, so you can always trace which rule set a value on a transaction. Locked transactions are never modified, which means you can safely re-run rules after importing new activity without disturbing periods you have already closed and synced.
A common month-end workflow: import the latest transactions, click **Apply All**, then filter the dashboard for transactions that still have no account. Whatever remains is genuinely new territory that needs a human decision, and possibly a new rule.
### Managing Rules
* **Activate or deactivate** a rule to include or exclude it from Apply All without deleting it.
* **Edit** a rule to refine conditions or actions. Use Preview again before saving to confirm the new match count.
* **Delete** removes the rule itself. It does not revert changes the rule already made; those stay on the transactions and in their history.
### Rules via the API
Everything above is also available programmatically, which is useful if you manage many clients with similar setups. See the API reference for [creating rules](/api-reference/rules/create-rule), [listing rules](/api-reference/rules/list-rules), [updating rules](/api-reference/rules/update-rule), and [applying rules](/api-reference/rules/apply-rules).
# Mapping Your Balance Sheet
Source: https://learn.breezing.io/features/balance-sheet-mapping
Learn how to map your crypto activity to your accounting balance sheet by Token, by Wallet, or a combined approach.
When bringing crypto transactions into Breezing, you must decide how you want them represented on your balance sheet in Xero or QuickBooks. Breezing's flexible Rules engine allows you to map your data in three distinct ways:
1. **Token View:** Track each asset globally across all wallets (e.g., Total ETH, Total USDC).
2. **Wallet View** *(deprecated)*: Track total value by the custody location (e.g., Treasury Wallet, Ops Wallet) regardless of the tokens inside.
3. **Combined View** *(deprecated)*: Track specific tokens inside specific wallets (e.g., Treasury Wallet - ETH).
***
### 1. Token View (Global Asset Tracking)
If you want a balance sheet account for every single token you hold (e.g., an account for ETH, an account for USDC), you'll use the Token View.
1. Ensure your Chart of Accounts in Xero/QuickBooks has a separate asset account for each major token you hold.
2. In Breezing, go to the **Assets** tab.
3. Click on a specific token (e.g., `ETH`).
4. In the account mapping dropdown, select your corresponding balance sheet account (e.g., "Ethereum Asset").
5. Click **Save**.
6. Repeat this for your other major tokens (USDC, USDT, MATIC, etc.).
7. **For minor tokens:** If you have small amounts of random tokens and don't want a dedicated account for each, select them all, click **Manage > Edit**, and map them to a generic "Other Cryptocurrencies" balance sheet account.
***
### 2. Wallet View (Custody-Based Tracking)
**Deprecated.** This walkthrough and its video use the original Rules (v1) builder, which has been replaced by **Rules V2**. If you still want a wallet-based mapping, build the rules in Rules V2 instead; see [Automation Rules](/features/automation-rules).
If you prefer to see your balance sheet organized by where the funds are held (e.g., Treasury Wallet, Ops Wallet) rather than the specific tokens, use the Wallet View via Rules.
1. Ensure your Chart of Accounts has asset accounts named after your wallets (e.g., "Ops Wallet Asset").
2. In Breezing, navigate to **Rules** and click **New Rule**.
3. Name the rule (e.g., "Ops Wallet Mapping").
4. Set the condition: `Wallet` `Equal` `Ops Wallet`.
5. Under the Actions section, set the **Asset Account** to your "Ops Wallet Asset" account.
6. Also map the **Fee Account** to the same Ops Wallet account (or a generic fee account, depending on your preference).
7. Save the rule.
8. Click **Duplicate** on the rule you just made, change the wallet condition to "Treasury Wallet", update the account mapping, and save.
***
### 3. Combined View (Token + Wallet Tracking)
**Deprecated.** This walkthrough and its video use the original Rules (v1) builder, which has been replaced by **Rules V2**. If you still want a combined mapping, build the rules in Rules V2 instead; see [Automation Rules](/features/automation-rules).
**Fees can map to a different account than the asset.** On some chains the gas token is not the token you are transferring, so a transaction's **Asset Account** and **Fee Asset Account** should point to different accounts. For example, a USDT or ETH transfer on BNB Chain pays its fee in BNB: the asset account maps to your USDT or ETH account while the fee asset account maps to your BNB account. The video does not cover this case, so remember to add fee asset mapping rules for each wallet's gas token.
For the most granular tracking, you can combine the two methods. This allows you to track, for example, specifically how much ETH is in the Treasury Wallet vs. how much ETH is in the Ops Wallet.
1. Ensure your Chart of Accounts has specific accounts like "Treasury Wallet - ETH" and "Treasury Wallet - USDT".
2. In Breezing, go to **Rules** and click **New Rule**.
3. Name the rule (e.g., "Treasury ETH").
4. Add **two conditions**:
* `Wallet` `Equal` `Treasury Wallet`
* `Coin` `Equal` `Ethereum` (or `ETH`)
5. Under Actions, set the **Asset Account** to "Treasury Wallet - ETH".
6. Save the rule.
7. Click **Duplicate** to easily create the next rule for "Treasury Wallet - USDT", simply changing the `Coin` condition and the destination account.
8. Once all specific tokens are mapped, you can create a catch-all rule (e.g., `Wallet = Treasury Wallet` AND `Coin != ETH` AND `Coin != USDT`) to route all remaining dust/minor tokens into a "Treasury Wallet - Other Crypto" account.
*Important: After creating or editing Rules, ensure you apply them so they take effect on your historical transactions!*
# Balance Verification
Source: https://learn.breezing.io/features/balance-verification
Verify wallet balances in Breezing with automated balance checks, manual attestations with evidence, and a sync-time verification gate.
Before you sync journals to your accounting system, you want confidence that the balances in Breezing match reality. Balance Verification gives every wallet a verification status, an automated check against on-chain and exchange data, a manual attestation flow with evidence for everything else, and a full audit history.
### Verification Statuses
Each wallet on the **Wallets** page shows a badge in the **Balances** column. Hover over it to see how, when, and by whom the wallet was last verified.
* **Verified**: an automated balance check matched Breezing's balances against the source, and nothing has changed since.
* **Attested**: a team member manually confirmed the balances and recorded it.
* **Stale**: the wallet was verified or attested before, but transactions have been edited or new activity has been imported since. Verify again.
* **Mismatch**: the last automated check found a variance above the tolerance (0.01) on at least one token.
* **Not verified**: the wallet has never been checked or attested.
### Running an Automated Balance Check
Open a wallet from the **Wallets** page and find the **Balance verification** card.
1. Click **Run balance check**.
2. For supported blockchains, pick the date to verify. EVM chains and Solana support any past date, which is what you want for period closes. Bitcoin-family chains (BTC, BCH, LTC, DOGE, DASH) and exchange APIs only provide current balances, so those checks always run as of now.
3. The check runs in the background; track it under **Running tasks**. Behind the scenes, Breezing generates an [Explorer Balances Check](/features/explorer-balances-check) report comparing its recorded balance for every non-spam token against the explorer or exchange balance.
4. When it finishes, the wallet status updates to **Verified** or **Mismatch**, and the result appears in the history with a link to the full report.
If a check comes back as a mismatch, open the linked report to see which tokens are off, then run a [Wallet Integrity Check](/features/wallet-integrity-check) to find and reconcile the missing or duplicate transactions behind it.
### Manually Attesting Balances
Some wallets cannot be checked automatically, such as CSV imports, exchanges without API access, or unsupported chains. For those, or whenever you have verified balances yourself against a statement, use manual attestation.
1. In the **Balance verification** card, click **Mark as verified**.
2. Set the **Balances as of** date. For a period close, pick the period end date; Breezing shows its computed balances as of that day so you can compare them against your statement or explorer.
3. Describe what you verified and against what in the note field. The note is required.
4. Optionally attach up to 3 evidence files (PNG, JPG, or PDF, up to 25 MB each), for example a screenshot of the exchange balance page or a custodian statement.
5. Click **Mark as verified**. The wallet status changes to **Attested**.
### Checking Balances on a Block Explorer
Whenever you want to verify balances by hand, whether to double-check an automated result or to prepare a manual attestation, compare Breezing's balances directly against a block explorer. Breezing supports 80+ blockchains and exchanges, which means a single wallet address might hold tokens on Ethereum, Polygon, Optimism, and more. Check each network against its respective explorer (like Etherscan or Polygonscan).
1. Navigate to the **Wallets** page in Breezing.
2. Select the wallet address you want to verify.
3. Open a new tab and go to a block explorer, such as [Etherscan](https://etherscan.io/) for Ethereum. Paste your wallet address to pull up the live token balances.
4. Back in Breezing, click the **Filter** button.
5. In the **Network** filter, select the exact network you are checking (e.g., `Ethereum`). This hides transactions from other chains so you can compare apples-to-apples.
6. Compare the token balances listed in Breezing (e.g., your total ETH or specific DAO tokens) against the balances reported by Etherscan.
7. Repeat the process for other networks by changing the filter in Breezing to `Polygon` and checking [Polygonscan](https://polygonscan.com/), etc.
Once you have confirmed the balances match, record it with a manual attestation (see above) so the wallet shows as **Attested**.
If the balances do not match and you haven't started categorizing transactions yet, the quickest fix is to delete the wallet connection and re-add it; a fresh read usually resolves a dropped API pull. If you have already started working on the wallet, run a [Wallet Integrity Check](/features/wallet-integrity-check) instead to find and reconcile the exact discrepancies without losing your work.
All right, cool. Once you got your wallet address in, now you need to verify the balances are accurate. So, what you're going to do is you're going to you see kind of there's a a wallet here. I added the Treasury wallet. There's an ops wallet. So, I need to verify these balance. So, I'll go to the Treasury wallet first. I'll select the wallet address up here. I'm going to go to Ether Scan. Throw an Ether Scan. Throw that wallet in there. It's going to give me kind of the balance. And then I now need to verify. So, these are all the balances that I've for all the transactions I've added. I've added 55 of them. I first just need to filter for just the Ethereum network because again I'm just checking E ether Ether scan right now which is on the Ethereum blockchain. Click filter and you see it's kind of like filtered out the transaction. So two transactions were not related to Ether Scan. So that's pretty important. So now I want to verify that this Ethereum balance matches with this Ethereum balance right here. And it looks like it does. 062464 0644. And then you do kind of the same thing all the way down. You come down here look at Dow. the Dow balance is 64906. Look at Dow 64906. Looks like it's matching pretty well. Um, that's kind of what you want to do mostly. And then once you kind of have done it for Ethereum, you then want to kind of see what other chains there are. You see there's like one for Polygon. So now you want to check Polygon. And the way you do Polygon is again you come down here, you then select the uh the chain in, you select Polygon, go ahead and filter it. There's two transaction polygon. And now don't worry about this negative balance on Madic because this is actually they changed their symbol recently to pull. So that's why it's appearing negative right now. So yeah, you go to polygon scan. Take wallet as well in here. You then just want to throw it in here. And then you want to check the 544831. 5483. It does match once you subtract this one. So there you go. Um that's good to go. If the balances do not match, the best way to do it is to just read the wallet. So, if you haven't done any work yet, the best way to do it is just read the wallet. Click here, delete the wallet, and then again, just do the same steps and just read it. Usually, that kind of fixes the problem. Sometimes there might be like a slight delay on the API, but yeah, that kind of gives you an idea how to work this. And yeah, looking forward to showing more
### The Sync Verification Gate
When you sync transactions to Xero, QuickBooks, or Bexio, Breezing checks the verification status of every wallet the sync touches. If any are unverified or stale, a dialog lists them in two groups: wallets that **can be checked automatically** and wallets that **need manual attestation** (exchange, CSV, or unsupported chain).
From the dialog you can:
* **Run balance check** on all checkable wallets at once.
* **Attest** each manual-only wallet without leaving the flow.
* **Proceed anyway** to sync without verifying. The override is recorded in each wallet's verification history as "Synced without verification", along with your reason.
The gate has three company-level modes: off, warn (the default, which allows proceeding), and require. In require mode, only an owner or admin can proceed, and a reason is mandatory.
### Verification History
The **Balance verification** card lists the wallet's most recent verification events: balance checks with their **Matched** or **Mismatch** outcome, manual attestations, and sync overrides. Click any entry to see the details: the as-of date, how many tokens matched, the worst mismatch if there was one, a link to the generated report, the balance snapshot, the note, and the attached evidence files, along with who recorded it and when.
This history is append-only, which makes it a clean audit trail: you can always show an auditor when balances were verified, by whom, against what, and with what evidence.
### Related Pages
* [Wallet Integrity Check](/features/wallet-integrity-check): find and reconcile missing or duplicate transactions when a check comes back as a mismatch.
* [Explorer Balances Check](/features/explorer-balances-check): the report type behind automated checks, which you can also run directly.
# Calculate Gain & Loss
Source: https://learn.breezing.io/features/calculate-gain-loss
Configure your cost basis method in Breezing (Weighted Average, FIFO, LIFO, or HIFO) and calculate realized gains and losses on your crypto transactions.
Once your transactions are imported and categorized, Breezing can automatically calculate your cost basis and realized gains/losses on all outbound transactions and trades. You can choose from four cost basis methods: Weighted Average, FIFO, LIFO, and HIFO.
### 1. Configure Your Cost Basis Settings
Before running the calculation, you need to tell Breezing which accounting methodology to use.
A quick note on the video: it was recorded when Breezing offered two methods. LIFO and HIFO have been added since, and the setup steps are the same for all four.
1. Click on your **Company Name** in the top left corner.
2. Select **Settings**.
3. Under the **Cost Basis Method** section, you have four choices:
* **Weighted Average (WAC):** Averages the cost of every unit you hold. Common in many international jurisdictions.
* **FIFO (First In, First Out):** Consumes your oldest tax lots first. The standard method in the US.
* **LIFO (Last In, First Out):** Consumes your most recently acquired tax lots first.
* **HIFO (Highest In, First Out):** Consumes your highest-cost tax lots first, which typically results in the lowest reported gains.
4. Use the **Per Wallet** toggle to set the cost basis scope:
* **On:** Calculates the cost basis isolated to the specific wallet the asset is held in (Recommended).
* **Off (Universal):** Pools all assets across all wallets into a single cost basis pool.
5. Click **Update** to save your preferences.
### 2. Run the Calculation
1. Go back to your **Dashboard**.
2. Click the **Calculate Gains & Losses** button at the top.
3. A modal will appear confirming your current settings (e.g., *Weighted Average • Per Wallet*). You can also switch the cost basis method directly in this modal.
4. Select the tokens and wallets you want to run the calculation for (usually, you will just click **Select All** for both).
5. Click **Calculate**. Breezing will process the entire ledger in seconds.
### 3. Reviewing the Results
* **Line-by-Line Review:** Filter your dashboard by a specific token (e.g., ETH). If you scroll through the transactions, you will now see the *Cost Basis* and *Realized Gain/Loss* values populated on all outbound transfers and trades.
* **Audit History:** If you click the Calculate button again, Breezing shows you a history log of your previous runs (e.g., "Ran \<1 minute ago in FIFO"). This is great for audit trails.
* **Lot Reports:** If you are using a lot-based method (FIFO, LIFO, or HIFO), it's highly recommended to download the supporting documentation. Next to the calculation, click **Download FIFO Report**. This CSV file breaks down exactly which historical tax lots were consumed for every single outbound transaction, providing the exact unit price and transaction hashes for your records.
Arles you've gone through and you've labeled a bunch of transactions with the accounts and now the next step is to figure out okay what's my what's how do I calculate gains and losses on the entire account so you're going to go ahead and click the name up here you'll click settings you'll see there's an option to select either weighted average or fifo we're just going to select weighted average and there's an option to go either per wallet or Universal so if you're in the US now you want to S per wallet but anywhere else you can kind of still do the universal method recommendation is always to do per wallet just cuz it's easier to manage go ahead and update it'll save this when you're ready go back to dashboard calculate gains and losses it's kind of locked in weighted average here select all your tokens select all your wallets but of course you can select specific wallets if you want you don't have to select them all but select all your wallets go ahead and hit calculate so it's going to calculate gains and losses on a per wallet basis now and there you go it's going to get locked in you can go ahead and click one of the wallets maybe just want to filter for ethereum where you know there's going to be some kind of weighted average calculation um here you can kind of track it so here you see here's the cost bases it's running cost BAS there's no gains and losses on these ones because they're not outbound transactions um go all the way down you can see like here's a gain and loss on this outbound transaction it was a trade um so yeah you can kind of follow this all the way down and you can see the cost basis and weighted average and everything was kind of calculated and the gains and losses now if you change your mind you say actually you know what I don't I didn't really want to do it weighted average I really wanted to do it like fifo you just come down over here just like fifo you can even deselect for a wallet if you want but you can keep it hit update go back to dashboard go ahead and rerun it you'll see here it's also saving the history so you see you ran it here weighted average 18 tokens per wallet so it's giving you a nice little history of what happened before select all the token select all the wallets run it basically using fifo give it a few minutes or actually a few seconds the system flies done it's all good to go when you click back again here you'll see the last time now you ran it in fifo so it's giving you a history of the last time you ran it less than a minute ago in fifo and it was still per wallet so a little history in terms of what was your weighted average number for and then now for fifo you can see here we'll show you the gains and losses on fifo you'll see it there but to kind of keep track of the cost basically what you got to do for fifo is you got to kind of just select all and run what's known as a fifo report go aad and hit download the fifo report go ahead and open it in the fifo report you'll see the cost basis that was used on each of the transactions you'll see it here so I'm just going to kind of open these up a little bit so you see them one second bear with me kind of open up you'll see the transaction hash that's used pretty much on the outbound transaction the cost basis amount is right here on the unit price um and then you'll see kind of like the idea of the breezing transaction and anything else you want want to see but here's kind of the column you really want to follow this is the cost basis column that was used but yeah that's kind of how you validate and view our kind of the gains and losses and how you manage it here in breezing
# Categorizing Transactions
Source: https://learn.breezing.io/features/categorizing-transactions
Learn how to build context in Breezing by naming unknown wallet addresses and mapping transactions to your general ledger accounts.
Once your wallets are connected and your balance sheet mapping is configured, the next step is to actually label and categorize the transactions. Breezing makes it easy to assign recognizable names to anonymous wallet addresses and map transactions directly to income, expense, or asset accounts.
***
### 1. Naming External Wallet Addresses
When you first import data, you will see a lot of anonymous alphanumeric wallet addresses interacting with your wallets. Naming these addresses builds "equity" in your workspace, making future categorization much faster.
1. **Review your Transactions:** On the Dashboard, look for large or frequent transactions from unknown addresses.
2. **Name the Address:** Click into the transaction, or directly on the row, and type a recognizable name (e.g., "Blockchain Vendor", "Series A Investor", or "MME Legal").
3. **Global Application:** Once you save a name to an address, Breezing automatically applies that name to *every* past and future transaction involving that exact wallet address across your entire workspace!
4. **Review Required:** If you encounter a transaction you don't recognize, you can tag it as **Review Required**. Later, you can filter your dashboard by "Review Required" to handle them all at once or ask your client for clarification.
***
### 2. Adding Accounts & Descriptions to Transactions
Once you know *who* a transaction is from/to, you need to tell your accounting system *what* it was for (e.g., Sales, Legal Expense, Contractor Payout).
#### Categorizing Single Transactions
1. On your Dashboard, find a transaction.
2. Under the Account column, click and select the appropriate account from your Chart of Accounts (e.g., `Sales`).
3. **Adding a Description:** Click into the transaction details and add an Accounting Description (e.g., "Dev Work Invoice #102"). *Pro-tip: This description syncs directly into Xero/QuickBooks as the journal entry description!*
4. Click **Save**.
#### Automating Categorization with Rules
Instead of manually clicking "Sales" on 50 different inbound transfers from a specific customer, you can build a Rule to do it automatically. The full walkthrough of conditions, actions, and priorities lives in [Automation Rules](/features/automation-rules). Note that the video above shows the original rule builder; the current one is **Rules V2**, and the steps below reflect it.
1. Navigate to **Rules V2** and click **Add Rule**.
2. Name your rule (e.g., "Blockchain Customer Revenue").
3. Set your condition: under **Contacts**, select `Blockchain Customer` (the name you assigned in Step 1), and optionally set **Direction** to `In`.
4. Under the Actions section, set the **Transaction Account** to your `Sales` account.
5. Click **Preview** to confirm the matching transactions, then **Save** and apply the rule. Breezing will retroactively assign the "Sales" account to every transaction that matches this customer.
**Naming Wallet Addresses:**
All right, cool. Now you got your wallets in there. They're all set up. You got kind of all your balance sheet connected to kind of the various uh token view, wallet view, wallet, token view. You now need to start to build equity in the product. So the best way to do that is also to start to identify the context of transactions. So the best way to do it is um you kind of go through the transactions and you try and identify like who potentially these wallet addresses belong to. So for example, uh this client received 4.1,000 kind of ETH from Dow. They don't know what this wallet address is, for example. So, but let's say they remember it. They're like, "Oh, I remember this. This was I remember we received kind of a payment from let's say a vendor that we did blockchain work for." So, blockchain vendor or blockchain customer basically is what you could name this wallet. And then you hit save basically. And so, you see now that wallet has been named everywhere as blockchain customer all the way down. So, now every time you see kind of that wallet address, it's going to take on blockchain customer. Then you can come back to contacts here and you can see blockchain customer was taken. So if you already have a list of wallet address and know who they kind of belong to, the best way to do it is to kind of label it over here. So let's say this maybe like a legal wallet. So you can name this one MME if you want. Go ahead and save. So if you already have that list, that's great. But if you don't, you can always just go through here and you can just go through the list and try and remember based on transactions what this was. So maybe this was like an inbound 500k. Maybe this was like an investor, for example. So you remember this was an investor. What you're doing here is you're kind of like just building this equity that you're later on going to use to basically label the different transactions in different accounts, which I'll show you. But it's important to kind of run this first through. And then whenever you kind of don't know something or you have some some some basic questions about what that may be, it's always great to label that as a review required transaction. Um, and then you can save it and then you can always filter for it later on. just down over here. You can go to uh basically review required. Uh but I need to find it. See here. Oh, there it is. Come over here. Review required. Go ahead and filter and you can kind of see that transaction that we click review required for. So, but importantly at the beginning just go through label all the wallet addresses as best you can in terms of trying to understand what they were and then next step is to kind of label them on the account side. All right. Cool.
**Adding Accounts to Transactions:**
All right, cool. Next step is really just to start to assign accounts basically to different transactions in breezing. And the best way to do that is just kind of like you can either set up rules or you can also pretty much just label them directly. So here I actually have an example. This is like Ethereum transaction. Let's say I know this is supposed to go in legal. So I'll click over here. I'll just type legal. There you go. It's automatically labeled legal. But let's say then, okay, I actually want to get a bit more context. So I can click into this example. I click in this transaction. I see there's a bunch of details here which we'll go through in a bit. But basically what I'll do is I'll can also select the account over here. Let's say I know this is sales. This was an inbound sales transaction. I can go ahead and do that. Hit save over here and I'll save it as sales as well. I can also a little accounting description. Um this was let's say for deborg basically. I'll hit save. This kind of comes in handy later on. I'll show you because it'll sync directly into zero and I'll show you what it looks like. You got a bunch of detail here as well that kind of we'll go through later on. But that's kind of the first step and you really kind of just want to try to label these transactions as best you can. The other key thing is you can also build rules. So for example, if you remember, we had this one blockchain customer. Basically, we'll name it blockchain customer. We'll then here select I think it was wallet from equal and it was like blockchain customer basically. And then here I also select the transaction account. So instead of asset account or fee account, I'll just select transaction account. And here I'll just select sales for example. So I'm basically setting up a rule now. I'll hit add and then I'll just apply that rule. And so what it's doing, it's applying that rule across this specific customer, blockchain customer. Then let's say I'll go to my dashboard. I'll go to filter. I will filter for that blockchain customer right over here. Go to filter. And there it is. Blockchain customer. Here are all his wallets. All them label as sales. So that rule has been kind of officially applied. So you can either label them one by one or you can build specific rules. And the rules come in handy. I'll show you kind of later on kind of how you can work with rules. I'll do a full session on that. But this is kind of the next step. It's really kind of just starting to label these transactions so that you can prepare to basically sync them into Zero or QuickBooks or basically just produce a journal entry CSV, which I'll show you later on. Either one works, but that's the next step.
# Client Review Workflow
Source: https://learn.breezing.io/features/client-review
Flag transactions that need context and securely invite your clients to review and answer them directly inside Breezing, no spreadsheets or email threads.
Breezing keeps the back-and-forth between accountants and clients in one place. When you encounter an unknown transaction, a missing cost basis, or an ambiguous internal transfer, you don't need to export a spreadsheet and email it back and forth. You can handle the entire Q\&A process directly inside the platform.
### 1. Tag Transactions for Review
As you categorize transactions on your dashboard, you will inevitably find some that lack context.
1. Click into the transaction details.
2. Click the dropdown and assign the **Review Required** label, or type a custom internal note.
3. Save the transaction. It will now be flagged in the system.
### 2. Invite Your Client
You can grant your client restricted access so they only see what they need to see, without exposing your backend accounting settings.
1. Navigate to **Company Settings** > **Members**.
2. Enter your client's email address.
3. **Set Permissions:**
* **Organization Role:** Set to `Viewer`.
* **Company Role:** Set to `Editor` (so they can add notes/descriptions) or `Viewer` (if they should only look).
4. Send the invite.
### 3. The Client's Experience
When your client logs in, they will only have access to their specific company's workspace.
1. They can go to the Dashboard and use the **Filter** menu to select **Review Required**.
2. This isolates all the ambiguous transactions you flagged.
3. The client can click into each transaction and leave an Accounting Description (e.g., "This was a payment to our legal vendor, MME").
4. Once you review their notes, you can remove the "Review Required" flag, assign the correct General Ledger account, and sync the journal entry to Xero/QuickBooks!
# Contacts
Source: https://learn.breezing.io/features/contacts
Manage your counterparty directory in Breezing: name wallet addresses, import contacts via CSV, and map them to QuickBooks entities.
Every wallet address you name in Breezing lives in your Contacts directory. A named address shows its name on every transaction it appears in, past and future, which turns anonymous hex strings into readable counterparties like "Blockchain Customer" or "MME Legal".
### The Contacts Page
Navigate to **Contacts** on the left menu. The table lists each contact's address, name, and chain, and the search box lets you look up contacts by address or name. Click any row to edit it.
### Adding Contacts One by One
1. Click **Add Contact(s)** > **Add Contact**.
2. Fill in the **Contact Name**, the **Contact Address**, and the **Chain**.
3. Click **Add**.
Each address can exist only once per company; if the address is already in your directory, edit that contact instead. You can also name addresses directly from the transaction table while categorizing, as covered in [Categorizing Transactions](/features/categorizing-transactions); those names land in the same directory.
### Importing Contacts via CSV
If you already have a list of known addresses, upload them in one go:
1. Click **Add Contact(s)** > **Upload CSV**.
2. Prepare a CSV with two columns: `address` and `name`.
3. Drop the file in the upload area (up to 50 MB).
4. Breezing validates every row and shows how many contacts were accepted and how many were ignored, with an error log you can expand for line-by-line details.
If an address in the file already exists in your directory, it is updated with the new name rather than duplicated.
### Exporting Contacts
The **Download** button on the Contacts page exports your directory as a CSV. If a search filter is active, only the matching contacts are exported.
### Mapping Contacts to QuickBooks Entities
When QuickBooks is connected, editing a contact reveals a QuickBooks entity picker. Click **Refresh Entities** to pull the latest customers and vendors from QuickBooks, then select the entity this contact belongs to.
This mapping is what lets Breezing assign synced journals to the right QuickBooks customer or vendor, and it is a prerequisite for [closing QuickBooks invoices and bills](/integrations/quickbooks) from Breezing.
### Why Naming Pays Off
Contact names are more than labels. You can filter transactions by contact, and [automation rules](/features/automation-rules) can match on Contacts, so a well-maintained directory is what makes rules like "everything from this customer is Sales" possible.
# Explorer Balances Check
Source: https://learn.breezing.io/features/explorer-balances-check
Run an Explorer Balances Check in Breezing to compare recorded token balances against on-chain explorer data and catch mismatches in bulk.
The Explorer Balances Check report compares the balances Breezing has recorded for each token against the balance reported by the blockchain explorer, wallet by wallet. Instead of checking tokens one at a time on Etherscan, you get a full comparison table with the variances highlighted.
### Creating the Report
1. Navigate to **Reports** and click **New Report**.
2. Set the report type to **Explorer Balances Check**.
3. Pick the **Date** to check. For period closes, use the period end date.
4. Select the wallets and tokens to include (use **Select All** for a full sweep), and optionally narrow by chain.
5. Create the report. The results are always separated per wallet, and generation runs in the background.
Bitcoin-family chains (BTC, BCH, LTC, DOGE, DASH) only expose current balances, so those tokens are checked only when your selected date falls within the last 24 hours. For older dates on these chains, verify manually and record it with a [manual attestation](/features/balance-verification).
### Reading the Results
Each row is one token on one chain in one wallet:
* **Current Balance**: what Breezing has recorded.
* **Explorer Balance**: what the blockchain explorer reports for that date.
* **Variance**: the difference between the two.
* **Status**: **Matched** when the variance is within tolerance, **Mismatch** when it is not, and **Not checked** when the explorer lookup was not possible for that token.
### When Something Doesn't Match
A mismatch means Breezing's transaction history for that token is incomplete or contains errors, most often a missing date range, an unsupported contract interaction, or duplicates. Run a [Wallet Integrity Check](/features/wallet-integrity-check) on the affected wallet to find and reconcile the discrepancies, then **Regenerate** the report to confirm the fix.
This report is also what powers the automated [balance verification](/features/balance-verification) check: running a balance check from a wallet's verification card generates an Explorer Balances Check behind the scenes and records the outcome in the wallet's verification history.
# Internal Transfers & Trades
Source: https://learn.breezing.io/features/internal-transfers
Learn how to categorize and sync internal transfers between your own wallets, and how to handle crypto trades.
Breezing automatically detects transfers that occur between two wallets *you* own (Internal Transfers), as well as trades executed on decentralized or centralized exchanges (Trades).
Since these events just move value between your own assets rather than realizing external revenue or expense, handling them in your accounting software requires a specific approach.
### Method 1: The "Auto Apply" Feature (Recommended)
This is the simplest way to handle internals. When you use Auto Apply, Breezing syncs **only one side of the transaction** (either the outbound or the inbound) to your accounting system. This prevents your ledger from double-counting the movement and negating itself out.
1. On your Dashboard, open the **Filter** menu.
2. Select **Direction** > **Internal** (or **Trade**).
3. Select the internal transactions you want to process using the bulk checkboxes.
4. Click **Manage** > **Auto Apply Accounts**.
5. Select your Balance Sheet basis (e.g., `Token` or `Wallet`, depending on how you set up your balance sheet mapping in Breezing).
6. Breezing will automatically categorize the transaction to match the token or wallet it moved to, and sync only the appropriate side to Xero/QuickBooks.
### Method 2: Using a Control (Clearing) Account
Some accountants prefer to use a "Clearing Account" to track the flow of funds manually. If you use this method, Breezing will sync **both sides of the transaction** (the outbound and the inbound) directly to your clearing account, leaving it up to you to reconcile the balance.
1. Ensure you have created a "Crypto Clearing Account" or "Internal Swap Clearing Account" in your Chart of Accounts (in Xero/QuickBooks).
2. Go to **Chart of Accounts** in Breezing and click **Sync Chart of Accounts** to fetch the new clearing account.
3. On your Dashboard, filter for your Internals or Trades.
4. Bulk-select the transactions.
5. Click **Edit** to bulk-edit the account mapping.
6. Select your `Crypto Clearing Account` from the dropdown and hit **Update**.
7. Breezing will now sync both the inflow and outflow of these events to that clearing account. *You will need to manually review this account at month-end to clear out any opening or ending balances.*
***
### Manually Matching Internal Transfers
While Breezing automatically detects and matches most internal transfers by scanning the blockchain data, transfers involving Centralized Exchanges (where the "From" and "To" wallet addresses are masked) may occasionally slip through.
When this happens, you must manually group them so Breezing knows to transfer the cost basis properly without triggering a taxable capital gain or loss.
**If the transactions are on the same page:**
1. Check the boxes next to the outbound transaction (e.g., leaving a wallet) and the corresponding inbound transaction (e.g., arriving at an exchange).
2. Click the **Manage** dropdown at the top.
3. Select **Create Internal Group**. Breezing will instantly bind them together with a unique internal ID, signaling that cost basis should transfer smoothly between them.
**If the transactions are on different pages:**
1. Find the first transaction (e.g., the outbound).
2. Check the box, hit **Manage**, and select **Create Internal Group**.
3. Look at the transaction details and take note of the newly assigned Internal ID (e.g., `1827`).
4. Navigate to the next page and find the corresponding inbound transaction.
5. Click into the transaction details.
6. Check the **Internal** toggle.
7. Manually type the ID (`1827`) into the Internal ID field to bind them together across pages!
All right, guys. So, in this video, I'm going to show you how to do internals and trades predominantly kind of what's going to happen. So, I'm just going to go over here. I'm going to go filter. I'm going to filter for internals. I'm going to filter it. And I can see here's a bunch of internals that have been already pre-selected. They have this ID attached to them. So, these two, for example, are an internal for my off wallet, my treasury wallet. I know that based off this ID, 3933. If I click in here, I also see that same ID. Now, on internals, you got kind of two options. Uh, you could either come over here, you can go to settings and you could use a control account. I'll show you that in a second. Or you can use just Breezing's auto feature account, which I'll show what that looks like. So, if you want to autolel the internals, you can kind of select these two right here. You can click here, auto apply accounts, and you can select the base that you're on. So, usually you have a balance sheet, as mentioned earlier, token base, wallet based, or wallet token base. Right now, I kind of have a token base setting. So, I'm going to hit token base, and that automatically labels this as token. Keep in mind too also when you set up your balance sheet, let us know initially what it is. You can set it in the settings. Just go to token base and that kind of lets us know automatically kind of what you what the standard should be. So there you go. These two are selected on on wallet based. If you had token base, sorry on token base. If you have wallet base, you just do it on the wallet based segment. Uh the same thing goes for trades. I kind of show you what a trade is. I'm going to click direction filter for trades. Filter that out right here. So here I got a bunch of trades again. Here I'm going to do click on that. Click here auto apply accounts and I'll click token. And there you go. It'll select a token. I can do it for all three as well. So I can just like quickly auto apply accounts token based. Okay. So that's on the auto apply feature. Now you can do a control account. This is also quite common as well. So for example, if I wanted to I created a control account in my chart of accounts. So here is like a a clearing account. I was going to update my chart of accounts. So get accounts update the chart of accounts. Here you'll see there's a internal crypto clearing account and a swap crypto clearing account. And so if I just go back to my table here, I can go back to my settings, enable use control account, hit update, go back to my dashboard, and here I got a bunch of accounts. So here I can now just set these to my control account. So I can go ahead and just edit those ones in bulk. Select my swap crypto clearing account, which is my control account, and update. Now what would happen here is basically these three are going to get updated to my I should they should have got updated. I don't know what happened there but basically these three will uh sync all the two transactions to my swap crypto cleaner account and there is kind of like where I'll just kind of have to review that account every kind of period to clear up any opening balances or ending balances there. Uh the other way if you use a if you use just the auto apply feature what it's doing in this mechanism is it's basically saying um only sync one side of the transaction uh and not the other one and that kind of helps basically uh ensure that there's an actual booking there. It's kind of but either or works. The same thing worked for internals like same thing. You can go ahead and kind of select swap clearing accounts here. So edit I have an internal swap clearing account. Update all of them. And it's kind of updating it automatically into that cryp internal clear room account. And again this one's syncing both sides of transaction. So syncing the inbound and the outbound into a crypto clearing account. And instead of syncing just one side, if you use auto apply feature and you untoggle crypto clearing account, it's only going to sync one side of the transaction and not the other one. And the reason being is if you sync both of them, uh it'll kind of negate each other. So those are the options to use on using a crypto clearing account and breezing and kind of kind of the differentiation between the internals and trades. Cool. I'm ready for any questions.
# Reporting & Exporting
Source: https://learn.breezing.io/features/pull-breezing-report
Learn how to generate clear, simplified Token and Wallet Reports in Breezing to review your crypto activity by asset or by wallet for any period.
Many crypto accounting tools generate dozens of overly complex reports that leave you lost. Breezing keeps it simple. This guide covers the two everyday reports: **Token Reports** and **Wallet Reports**. For period-end reconciliation, see the [Account Report](/features/account-report) and the [Explorer Balances Check](/features/explorer-balances-check).
### Generating a Token Report
The Token Report gives you a global view of all assets across all wallets, showing you opening balances, in/outs, realized gains/losses, and closing balances for a specific period.
1. Navigate to the **Reports** tab.
2. Click **New Report** and set the report type to **Token**.
3. **Name your report** (e.g., "End of Year 2024 Balance") and add an optional description.
4. **Select the Date Range.** *Pro-tip:* If you want to verify your opening balances are perfectly reconciled to zero, set the start date all the way back to inception (e.g., 2019) and the end date to your desired closing date (e.g., Dec 31, 2024).
5. Select **All Wallets**, **All Tokens**, and **All Chains** (or filter them if you only want to report on a specific subset).
6. Leave the **Separate by wallet** toggle off for a global view.
7. Click **Generate**. The report processes in seconds.
**Reviewing the Token Report:**
* Once generated, click into the report. You will see a clean breakdown of Opening Balances, In/Outs, Realized Gains & Losses, and Closing Balances.
* **Toggle Fiat Amount:** This is crucial. Toggling on FIAT will populate the FIAT values. You will see:
* Your **Cost Basis** (what you should have in your accounting system).
* The **Token Price** on the exact end date of the report (e.g., Dec 31st).
* The **Total Fair Market Value (FMV)** on that date.
* An automatic calculation showing what you need to book as an **Impairment or Markup** to bring your ledger to FMV.
### Generating a Wallet Report
The Wallet Report provides the exact same data but separated strictly by custody location (e.g., Treasury Wallet, Ops Wallet, Kraken).
1. Follow the same steps as above, but this time **turn on the "Separate by wallet" toggle**.
2. Click **Generate**.
3. When you open the report, you will see the tokens nested underneath each specific wallet (e.g., The ETH in the Treasury Wallet vs. the ETH in Kraken).
4. This is highly useful for reconciling balances on a per-exchange or per-wallet basis.
### Exporting to CSV
Both the Token Report and Wallet Report can be easily exported for offline analysis or to share with auditors.
* Click the **Download CSV** button on any generated report.
* The CSV cleanly splits the fiat amounts and token amounts into easy-to-read columns so you can verify balances and perform custom analysis.
All right, cool. So, the next thing I'm going to show you is reports. Now, a lot of the other providers have like a thousand reports and you totally get lost and you don't know which one to pull. We're super simplified in our reporting. I'll just kind of show you what it looks like. So, go a hit reports here. You'll see there's already kind of two reports that I was kind of playing around with. I'm going to add a new one. I'm going to add pretty much the token report here. I'm going to call this one balance 2024. Um, I can name it. I can kind of add a little description, but I won't. I'm going to go all the way back 2019. I'm going to pull it all the way to 2024 December. I'm going to select all my wallets. I'm going to not tack tackle this just yet. I'm going to keep it open. I'm not going to separate by wallet. I'm going to select all the tokens. I'll select all the chains. Go back up and I'll generate. And then you just got to give it a few seconds. All right. So, now the report's generated. It's done. I go ahead and click into it. I'll see here a couple details. So here I'm seeing kind of opening balances which are all zero because I pulled all the way back. I'll see the in I'll see the inbound transaction the outbound the outbound the any realized gains and losses separated and the neted out the closing balance and here these are empty for now. Um and then if I toggle the fiat amount that's kind of where these will get a little more populated. So I'll see kind of like the ins outs the gains and losses um the closing balance. This is like your cost basis, which you'll probably have in QuickBooks or Zero, your accounting system. And then here, it's giving you the token price on December 31st, 2024. And then it's giving you what you potentially can book as an impairment or bring it up to fair market value. And then this is kind of your total at fair market value pretty much on December 31st, so this is kind of what you're going to have to book in your accounting system to get this value at fair market value. So that's kind of a very simplified report. It kind of gives you really everything you need. You don't really need too much more than that. Um, you can download this report as well as CSV. And you can kind of play around with it a bit more easier than what you currently have. Go ahead and take that. Oh, one second. Always a problem whenever you download all those like that. You kind of split it up. You see here, here's the fiat amount. Here's the token amount. And you can kind of play around with these and verify that your balances are correct. Now, you can pull another report as well. And this is kind of showing you pretty much a report I would say in the token uh, sorry, in the wallet view. So, it's kind of like a wallet report you can pull. This time I won't take everything. Maybe I'll just start it from let's start it from 2021 January and we'll pull to 2024. So, you'll see some opening balances there. We'll select all the wallets again. We'll separate per wallet, all the tokens, all the chains. Go back up and we'll generate. We'll just wait a few seconds. And there it is. Done. Click on the wallet view. So, now it's givingven you split by wallet. So now it's added all these tokens in by wallet. You'll see now there's an opening balance. This was your opening balance of ETH on January 1st, 2021. Um, and here's your closing balance of ETH on 20 on January 31st, 2024. You can again switch it up to fiat and you can see what it was initially supposed to be in beginning. Here's what it's supposed to end with. Here's gains and losses. Here's kind of bringing it up to fair market value basically. And again, you can download this. You can see it within each wallet. So that was Treasury wallet. Here's Ops wallet. And here's kind of anything we did in Kraken basically. Yep. So that's how it works. Download it again CSV. You can totally work it.
# Transaction Attachments
Source: https://learn.breezing.io/features/transaction-attachments
Attach invoices, receipts, and evidence files to transactions in Breezing, and push them to the matching Xero journal entry.
Auditors ask "what was this payment for?", and the best answer is the invoice sitting right on the transaction. Breezing lets you attach evidence files to any transaction and, if you use Xero, push them onto the synced journal entry itself.
### Uploading an Attachment
1. Open a transaction from your Dashboard.
2. Find the attachment area in the transaction details and click **Attach Invoice**, or drop a file straight onto it.
3. Supported files are PDF, PNG, and JPG, up to 25 MB, one file per upload.
4. Review the selected file, then click **Upload & Save**. A progress bar tracks the upload.
Uploaded files appear in the **Attachments** card on the transaction with their upload time. You can attach multiple files to the same transaction by repeating the process.
### Viewing Attachments
Click **View** next to any attachment to open it in a new tab. Attachments are private to your company; download links are generated on demand and expire after a few minutes, so files cannot be shared through permanent URLs.
### Pushing Attachments to Xero Journals
If the transaction has been synced to Xero, each attachment shows an **Attach to Journal** button. Clicking it uploads the file to the matching manual journal in Xero, so the evidence lives in your accounting system too. Once pushed, the button becomes an **Attached to Journal** badge.
This is currently a Xero-only feature; QuickBooks and Bexio journals do not receive attachments.
### Where This Fits
* During [categorization](/features/categorizing-transactions), attach the invoice or contract that explains the transaction while the context is fresh.
* During [client review](/features/client-review), clients can attach the documents you are missing.
* At period close, [balance attestations](/features/balance-verification) accept their own evidence files, so between the two, both your balances and your individual transactions carry proof.
# Update FIAT Prices
Source: https://learn.breezing.io/features/update-fiat-prices
Learn how to find and backfill missing fiat prices on your crypto transactions in Breezing so every entry carries an accurate value for reporting.
Occasionally, a transaction might pull in without an immediate FIAT conversion if the asset pricing was temporarily unavailable from the exchange or blockchain. Breezing makes it incredibly easy to identify and backfill these missing prices.
### How to Find and Fix Missing FIAT Prices
1. Navigate to your **Transactions** or **Dashboard** view.
2. Click on the **Filter** button.
3. Set up the following two filter parameters to isolate the missing prices:
* **Amount:** Set to `greater than 0` (this ensures you are looking at actual token movements, not zero-value spam).
* **Amount FIAT:** Set to `equal to 0`.
4. Click **Filter**. Breezing will now display a list of all transactions that successfully moved tokens but are missing their FIAT equivalent.
5. Select all the transactions on the page using the bulk-select checkbox.
6. Click the **Manage** dropdown menu at the top of the list.
7. Select **Update Token Price**.
8. Choose **Auto** and hit **Update Token Price**.
Breezing will automatically rescan historical pricing databases and backfill the missing FIAT amounts for all selected transactions. Once complete, they will disappear from this filtered view since their FIAT amount is no longer zero!
All right, cool. So, next thing you want to try and do is you want to check if all the fiat amount was correctly added basically in Breezing. Um, the way you do that is you kind of go to filter. Um, you come down here, you choose basically amount greater than zero. So, this is when the token amount is greater than zero. You then select pretty much the amount fiat if that's equal to zero. Go ahead and do that. Hit filter. You'll see like there's a bunch of these transactions up. We missed the fiat amount for these ones. So, the way you do that is you kind of like select them all. Select per page. Go to manage. Go to update token price. Click that. Click on auto. Basically, hit update token price. And then watch breezing as it updates the fiat amount for these ones that were potentially missed. And there you go. And now they're no longer missed. That's kind of how it works. That's kind of how you update the prices. Make sure all the prices are updated. And go ahead and just go ahead and use that again, the update token price feature. And that'll get you there. effects.
# Wallet Integrity Check
Source: https://learn.breezing.io/features/wallet-integrity-check
Run a Wallet Integrity Check in Breezing to find missing or duplicate transactions and fix wallet balances that do not match the blockchain.
When a wallet's balances do not match the blockchain, the Wallet Integrity Check tells you why. Breezing re-imports the wallet into a temporary test wallet, compares that fresh pull against the transactions you currently have, and produces reports showing exactly which transactions are missing and which are duplicates, along with the files you need to reconcile them. This guide covers the full flow, plus alternative repair methods for when you would rather re-pull the data wholesale.
### Step 1: Confirm There Is a Mismatch
After loading a wallet, first check that its balances match the blockchain (see [Balance Verification](/features/balance-verification) for the full flow):
1. Open the wallet from the **Wallets** page.
2. Click **Automatic Balance Check** and select the date to check up to.
3. Make sure you have imported transactions up to that date. If you check up to July 14 but only loaded transactions through June 30, you will get a mismatch that has nothing to do with data quality.
4. Run the check and open the result with **View Report**. It shows which token balances match and which do not, for example USDC matching while USDT and ETH are off.
If some tokens do not match, missing or duplicated transactions are the usual cause. That is what the Wallet Integrity Check finds.
### Step 2: Run the Wallet Integrity Check
1. Go back to the wallet on the **Wallets** page.
2. Click the **gear** icon and select **Wallet Integrity Check**.
3. Choose the period to check: from the beginning of the wallet's history, or a shorter range if you only suspect a recent period.
4. Click **Run the check**.
Breezing re-pulls all the wallet's transactions into a temporary test import, compares the fresh pull against the transactions currently in your workspace, and checks the resulting balance against the blockchain. Give it a few seconds to finish.
### Step 3: Read the Reports
The check produces three reports:
1. **Wallet difference report**: a comparison of your wallet against the test import (the freshly pulled wallet that Breezing validated against the blockchain). It lists the transactions missing from your wallet as well as any duplicates, meaning transactions in your wallet that should not be there. Every entry includes the transaction hash.
2. **Missing transactions in your wallet**: a CSV containing the transactions your wallet is missing, formatted so you can upload it straight back into Breezing.
3. **Missing transactions in the test import**: the transactions that exist in your wallet but were not found in the fresh pull. These are your duplicates, shown in full detail so you can review what you are about to delete.
### Step 4: Delete Duplicate Transactions
1. Copy the transaction hash from the wallet difference report.
2. On the transactions page, filter for the hash to find the transaction.
3. Select it, click **Manage**, and choose **Delete**.
### Step 5: Re-Add Missing Transactions
1. Open the **Missing transactions** file for your wallet to review it, then close it without changing anything. The file needs to stay exactly as Breezing generated it.
2. Click **Add Transaction** and select **Upload CSV**.
3. Choose the missing transactions file, toggle **Fiat amount**, and upload.
Breezing imports the missing transactions into your existing wallet in one go.
### Step 6: Verify the Fix
1. Click **Refresh Balances** on the wallet and give it a few seconds.
2. Rerun the automatic balance check.
3. Open the report. Every token should now match the blockchain, for example five out of five tokens matching where three were off before.
### Manual Balance Check
If you added transactions yourself manually, or the wallet is an exchange, use the manual balance check instead. It shows Breezing's balance as of a date you pick, and you can attach the document you verified against, such as an exchange statement. This gives you a recorded checkpoint even when an automated on-chain comparison is not possible. See [Balance Verification](/features/balance-verification) for the full attestation flow.
All right, cool. So, after you load your wallet, the first thing you want to do is you want to make sure you have all the transactions and the balance matches with the thing you have on the blockchain. So, that's a key thing you want to do first. So, you want to come over here. Very much going to refresh this page quickly. Going to come over here, click on the ops wallet, the one you want to check. Go ahead and hit automatic balance check. I go ahead and select the date you want to check it to. Make sure that you have all the latest transactions. If you check it up until July 14th, I've seen cases where someone checks it to July 14th, but they only loaded transactions like, let's say, up until June 30th. And obviously, you're going to have a balance mismatch there. So, make sure you have all the transactions at the latest date if you want to check it. If you want to check earlier, just go ahead and select earlier, but make sure that you are checking kind of the transactions that you do have compared to what you have on the blockchain. Go ahead and run the check. It'll just take a few seconds to run a little bit of report. Cool. So, it's giving me now the balance checker. So, it's giving me a mismatch. So, it's telling me I'm missing some transactions. When I click into here, I'll see three out of the five tokens have been a mismatch. I was going to click on the view report. When I click on view report, I'll be able to open it up and I'll see, okay, like, my USDC balance matches, which is great, but my USDT balance doesn't match, and neither does my Ethereum balance. So, it doesn't really match. So, the question is now like, what do I do? How do I fix it? Is the key thing. So, I'm just going to go back to the wallet. I'll click the wallet again. Now, the key thing, we just launched a new feature. So, pretty much you kind of click this gear over here. You run what's known as a wallet integrity check. Go ahead and click that. Go ahead and run it from the beginning or how many transactions or the period that you want to run it for. And what it's going to do is going to check for any missing transactions or any duplicated transactions in your existing wallet, and it'll kind of give you a whole report and kind of how to reconcile it. So, go ahead and hit run the check. And then just give it a another few seconds just to kind of run. And what it's doing now, it's basically just like re-pulling all the transactions. It's checking that new pull against the transactions you currently have. It's checking also against the blockchain to see if the balance matches. So, it's doing kind of this whole like data integrity kind of classification topic for you. You just have to kind of wait and give it a few seconds and it'll eventually get there. All right, cool. So, now it's kind of produced all the reports that you need. So, you'll see it's produced three different reports. Uh we're going to check them all out right now. We're going to check the first one. This is a wallet difference report. So, it's looking what is in the ops wallet versus what is in the ops wallet test import. So, the ops wallet test import is the wallet that it loaded that it's going to verify against the transactions you currently have in your existing environment. So, this is like the This is the validated wallet that like knows we know everything matches in this wallet and this is your wallet, the ops wallet. So, you go ahead and click this download report. Go ahead and open it. You can see here in the report it's telling you kind of what's happening. So, here it's showing you, okay, in the test import you're kind of missing this transaction over here, this Ethereum transaction. And in your wallet, the one that you have right now in the environment, you're missing these transactions. So, you're clearly missing transactions, but you also seem to have a duplicate transaction. So, a transaction that you're not supposed to have in your wallet. So, what we're using does it also gives you the hashes. So, what you want to do is you want to delete that transaction that you maybe added by accident or who knows what happened there. You can kind of click on the hash over here. You want to filter for it. You want to find it. You want to select it. You want to manage then you want to delete it. So, you want to get rid of that one first off. So, that one's now gone. And then now the next thing is you got to re-add these three transactions. It seems like you missed these. Something happened, who knows, but you're just going to have to re-add those. So, the way you're going to do that is there's a there's a missing transactions in ops wallet. So, if you go ahead and click that, you'll be able to see the full These are the three transactions that you were missing. So, that's like perfect. That's what you want to add. So, you want to go ahead and close that. You don't want to alter that document. So, you want to go ahead and click add transaction, go upload CSV. It'll open the file. Go ahead and select it. Toggle fiat amount and go ahead and upload it. So, that's uploading the three missing transactions. So, that file has kind of like done it all for you. It's going to upload those three missing transactions into your existing wallet. And that will hopefully solve the data problem. Then next thing here is you have this other file called missing transaction off lot test import. This is the basically the wallet that was in the test environment that we used to to kind of compare against. If you click on that one, you'll see you're going to find that one Ethereum transaction that we deleted. So this was that Ethereum transaction that we said that we had in our wallet, but it wasn't supposed to be there. It's giving it to you if you just want to see what it was in more detail. So you go ahead and close that. Close up all your files. Now you've loaded everything, go ahead and close everything up in here as well. You don't need any of that. That should all go away. And then you just got to come up here, you refresh your balances. Give it a few seconds. Then you then you rerun the balance checker again. Again, you're up to date and let's see now the balance should match. So again, give it a few seconds. And there you go. Now the balance matches. See now we have a match here. You go ahead and click in there. You can see it's five to five matches. Click the view reports. You can open up and now you everything kind of matches perfectly against the blockchain and you have everything you need and the data integrity is done. Um now let's say there's scenarios where you add transactions yourself manually. For that we have a manual balance check. So here you click here, it'll kind of give you the balance at this point. You can upload let's say the document that you used to verify the balance manually if you wanted to. You can also change the date balance as of. So this is kind of more of a manual check just for yourself in case you upload something manually or maybe you upload it against an exchange. So for exchanges for example, this is a great feature to have to also verify the balances up until a certain point. So go ahead and use that for those kind of scenarios. Um overall, yeah, that's the kind of the balance checker. That's the whole data integrity module. It's a cool new module, really helps ensure that you have all the data and everything's kind of accurate and also reduces a lot of like the CS burden um on you and us in terms of doing work. All right, cool. Let me know if you need anything.
### Other Ways to Fix Wallet Balances
The Wallet Integrity Check pinpoints individual transactions, but sometimes re-pulling the data wholesale is faster. Which method fits depends on how much work you have already done in the workspace.
### Method 1: The "Fresh Start" Approach
**Best for:** Workspaces where you have *not* started categorizing or labeling transactions yet.
The simplest and fastest way to fix a corrupted API pull is to delete the wallet and read it again.
1. Navigate to the **Wallets** page.
2. Select the problematic wallet.
3. Click **Settings** and select **Delete**. This will completely remove the wallet and all its historical transactions from Breezing.
4. Click the **+ (New)** button, select **Blockchain**, paste the wallet address back in, name it, and re-pull the data via **Network**.
A fresh read will almost always resolve temporary API delays or skipped transactions.
### Method 2: Re-pulling a Specific Date Range
**Best for:** Workspaces where you *have* started categorizing transactions in previous periods, but a newer period is missing data.
If you've spent hours categorizing transactions from 2023, you do *not* want to delete the entire wallet and lose that work just because 2024 is missing a few transactions! Instead, you can delete and re-pull only the corrupted period.
1. Go to your **Dashboard**.
2. Identify the specific time period that is missing transactions (e.g., "I know everything up to 2023 is perfectly categorized, but early 2024 is corrupted").
3. Use the **Filter** or manually select the transactions from the problematic period (e.g., all 2024 transactions).
4. Click **Manage** and select **Delete** to remove *only* those selected transactions. Your past work (e.g., 2023) remains safely in Breezing.
5. Now, go back to the **Wallets** page and select that wallet.
6. Click **Get Latest Transactions**.
7. Adjust the date range to match the period you just deleted (e.g., Jan 1, 2024 to Present) and click **Continue**.
Breezing will re-pull only the missing period, ensuring you get the skipped transactions without overwriting your past accounting work.
### Method 3: Adding Transactions Manually
**Best for:** Edge cases where a specific transaction simply will not sync via the API, or you're missing a single internal transfer.
If re-pulling the data still leaves you missing a specific transaction, you can manually insert it to balance the books.
1. On the Dashboard, click the button to **Add Transaction Manually**.
2. Enter the exact **Transaction Hash**, Timestamp, Token amount, Asset name, and Direction.
3. Save the transaction. This manual entry will fill the gap and force the wallet balance to match the block explorer.
All right, cool. So, let's say now you want to fix the balances on a specific wallet. Um, the best way to do that is if you haven't started working on the wallets themselves, uh, the best way to do is to really just delete um, the actual entire wallet itself and then read it. Um, sometimes the API kind of skips a beat. So, I'm going to ahead and copy that here. Setting, delete, delete the wallet. And then I'm going to read the ops wallet again. Blockchain. Add the wallet in here. call ops wallet. Okay. Continue via network. And then just go ahead and hit it right there. And there it is. Off wallets re-dited. And then I can again verify these balances. But let's say there's a scenario where you already started working on the wallet itself and you now basically just want to like you know not delete the entire wallet because you've already started working on it but you know you're missing some transactions let's say. So let's say you were already like labeling these transactions as like you know the ones in the past down here like as like other revenue or whatever it might be and you know there's a specific like time period that you lost some transactions in u. And so what you do is you just delete that time period. So, let's say May 29th and May 29th and Feb 18th and Feb 6. Let's say I know everything from here. Let's say let's say everything in 2024 I'm just going to delete because I know the balances up to 2023 were good, but 2024 I knew something was fishy up was something fishy was going on there. So, I would hit manage. I would delete them. So, they're gone. I only have up to 2023 transactions. I would then go back up here. I would get latest transactions again and I would see, okay, it's pulling 2023 2025 again. Hit continue. So I'm letting it pull those extra 2024 transactions that I just deleted and anything kind of else that was missing during that period. So that's predominantly because I had worked on the transactions in prior periods and I don't want to get rid of that. So there it is pulled me the additional transactions here. I can see 2024 is repulled and I can then just check okay did they did it capture those transactions I had missed previously. Now if there's a transaction that is not working even with this method. The other method is to just add these transactions in manually. So you can add them like this. Throw the hash in, throw all the details in and then add it manually. That also helps fill in the gaps on kind of like figuring out making sure the balances match. So that's the way you reconcile the wallets, making sure the balances match.
### Related Pages
* [Balance Verification](/features/balance-verification): verification statuses, automated balance checks, manual attestations, and checking balances on block explorers.
* [Explorer Balances Check](/features/explorer-balances-check): the report type behind automated balance checks.
# Add Your Company
Source: https://learn.breezing.io/getting-started/add-company
Set up your organizations and companies in Breezing, structure entities, and invite team members or clients.
When you first log in to Breezing, the first step is to set up your entities the right way.
### Structuring Your Entities
Breezing allows you to set up organizations and companies based on your actual corporate structure. This is especially useful for accountants managing multiple entities or groups of companies.
1. **Create the Top-Level Organization**: For example, you might create an organization for a specific region, like *KPMG US* or *KPMG Switzerland*.
2. **Add Companies Under Organizations**: Within *KPMG US*, you can add specific client companies, like *The Graph USD*. Within *KPMG Switzerland*, you might add *Safe* or *Casper Labs* using the CHF currency.
3. **Consolidated Groups**: If you have a group of companies with multiple jurisdictions, you can use the organization as a holding company. For instance, an organization named *The Graph* could hold both *The Graph USD* and *The Graph Switzerland CHF*.
You can add as many companies as you want underneath an organization.
***
### Inviting Team Members & Clients
Once your companies and organizations are structured, you can invite your team members and clients to collaborate.
There are two different levels of settings for invitations: **Organization Settings** and **Company Settings**.
#### 1. Inviting Users to an Organization
To give someone access to your wider organization (e.g., inviting a coworker to the *KPMG US* organization):
1. Navigate to the specific organization.
2. Click on **Organization Settings**, then go to the **Members** tab.
3. Enter the user's email address (e.g., `john.doe@gmail.com`).
4. Select a role (Owner, Manager, Editor, or Viewer). You can review the exact permissions by clicking "View Role Explanation".
5. Send the invitation. The user will receive an email to accept and register on Breezing.
#### 2. Inviting Clients to a Specific Company
If you are an accounting firm, you likely don't want clients seeing your entire organization. You can invite them to *only* their specific company view.
1. Navigate into the specific company (e.g., *DTO Crypto*).
2. Go to the **Company Settings**, then the **Members** tab.
3. Enter the client's email address.
4. **Important Role Settings for Clients:**
* **Organization Role:** Always set this to **Viewer**.
* **Company Role:** Typically, give them a **Viewer** or **Editor** role. *Avoid giving clients Owner or Manager roles.*
5. Send the invitation.
*Bonus:* You can also make a specific client the **Billing Manager** for their company. This allows the client to subscribe to the workspace directly, so you don't have to take on the subscription costs and bill them later.
# Chart of Accounts
Source: https://learn.breezing.io/getting-started/chart-of-accounts
Upload your Chart of Accounts via CSV or sync it from Xero or QuickBooks, then configure fee and gain/loss accounts.
Mapping your crypto transactions to your accounting system starts with the Chart of Accounts (CoA). You can do this quickly to maintain clean books.
### Uploading Your Chart of Accounts via CSV
If you are not using Xero or QuickBooks Online, or prefer to upload your accounts manually, you can use the CSV upload method:
1. Click on **Chart of Accounts** on the left-hand menu.
2. Select **Upload CSV** (instead of Link accounts).
3. **Format your CSV file**: Ensure your file has exactly three columns:
* `Code`
* `Name`
* `Type`
4. Clean up the CSV export from your accounting system to match this exact format.
5. Click **Continue**, select your CSV file, and Breezing will pull in your entire chart of accounts.
***
### Adding Fee & Gain/Loss Accounts
Once your Chart of Accounts is inside Breezing, it's critical to configure the essential crypto accounting accounts, specifically your **Fee** and **Gain/Loss** accounts.
1. Look at the top left of your Breezing dashboard and click your **Company Name**.
2. Select **Settings** from the dropdown menu.
3. Scroll down until you see the account mapping section:
* **Company Fee**
* **Company Net Gain**
* **Company Net Loss**
4. Map these to the appropriate accounts in your Chart of Accounts (e.g., *Wallet and Exchange Fee* and *Realized Net Gain/Loss*).
* *Note: You can use the same account for both Net Gain and Net Loss if you combine them in your P\&L.*
5. Hit **Update** to save.
**Missing these accounts?**
If you don't see the accounts you need in Breezing:
1. Go back to your accounting system (Xero, QuickBooks, etc.).
2. Create the missing Fee or Gain/Loss accounts.
3. Come back to Breezing > **Chart of Accounts**.
4. Click **Sync Chart of Accounts** on your integration card to fetch the newly created accounts.
5. Go back to your Company Settings and map them!
# Subscription Plans
Source: https://learn.breezing.io/getting-started/subscription-plans
Learn how to choose the right Breezing subscription plan for your transaction volume and assign billing managers to handle payments for your workspace.
When you first set up your workspace and attempt to add a new wallet or exchange, Breezing will prompt you to choose a subscription plan. Choosing the right plan is crucial for managing your crypto accounting smoothly and avoiding unnecessary upgrades later.
### Simple Pricing, Drama Free
Breezing offers transparent pricing tiers based on transaction volume. All plans include **Unlimited Wallets** and **Unlimited Users**, and you can choose to be billed in multiple currencies: **USD, CHF, GBP, EUR, or CAD**.
For the most up-to-date details, visit our [official Pricing page](https://breezing.io/pricing/).
| Plan | Monthly Cost | Yearly Cost (Billed Annually) | Yearly Savings | Transaction Limit |
| :--------------- | :-------------- | :---------------------------- | :------------- | :--------------------------- |
| **Basic** | \$29 / month | \$350 / year | Save \$70 | Up to 600 Transactions |
| **Standard** | \$75 / month | \$900 / year | Save \$180 | Up to 3,000 Transactions |
| **Professional** | \$250 / month | \$3,000 / year | Save \$600 | Up to 10,000 Transactions |
| **Advanced** | \$625 / month | \$7,500 / year | Save \$1,500 | Up to 50,000 Transactions |
| **Premium** | \$1,542 / month | \$18,500 / year | Save \$3,700 | Up to 300,000 Transactions |
| **Scale** | \$2,917 / month | \$35,000 / year | Save \$7,000 | Up to 1,500,000 Transactions |
*(Note: For over 1.5M transactions, custom enterprise pricing is available by contacting [hello@breezing.io](mailto:hello@breezing.io)).*
***
### How to Choose the Right Plan
Breezing subscription tiers are structured around **transaction volume** over a specific **accounting period**. Understanding this distinction is key to picking the most cost-effective tier.
1. **Estimate Your Total Transactions**:
* Before subscribing, determine approximately how many transactions exist across all wallets and exchanges in your workspace.
* *Example:* If you have around 400 transactions, the entry-level plan (\$29/month) is perfect. If you have a high-volume trading bot with 19,000 transactions, you'll need the Advanced tier.
2. **Understand Your "Accounting Period"**:
* An accounting period in Breezing is the timeframe you are actively reconciling and doing books for.
* *Standard Year:* If you are doing the books for 2024, your accounting period is the entire year of 2024.
* *Backlogging:* If you need to catch up on historical data (e.g., 2022, 2023, and 2024), your accounting period spans all three years. You must factor in *all* transactions pulled during those three years to select the correct plan.
3. **Select Your Billing Cycle**: You can choose to pay on a monthly or yearly billing cycle. Yearly billing offers significant discounts as shown in the table above.
4. **Rolling Credits**: Once you close an accounting period and finish the work, you can roll your transaction limit credits forward into the next accounting period.
***
### Assigning a Billing Manager
If you are an accounting firm or part of a larger finance team, you may not want to hold the subscription cost yourself. You can assign a **Billing Manager** (such as your client, CFO, or VP of Finance) to pay for the workspace directly.
1. Navigate to **Members** in your organization or company settings.
2. Add your client or teammate's email address.
3. **Set Permissions:**
* **For Clients:** Set Organization Role to **Viewer** and Company Role to **Viewer** or **Editor**.
* **For Internal Teammates** (e.g., CFO): Set a higher role like **Editor** for the organization/company.
4. **Enable Billing Manager**: Check the "Billing Manager" toggle before sending the invite.
5. Once they accept the invite, they will have the authority to subscribe to the workspace and enter their payment details on behalf of the company.
All right. So here you would have seen the check cuz you would have gone all the way through. It would have asked you now to choose a plans the next one. So you'll realize if you try and hit get new wallet basically it's going to ask you to kind of upgrade. So here it's important to try and understand approximately like how many transactions you have in your workspace so you can choose the right plan. So for example, if I only have like 400 transactions, I know this plan is the right plan for me. It's \$29 a month and I can pay yearly or monthly. The same goes if let's say I know I have like 20,000 or 19,000 transactions. Then I know okay it's not this plan it's not this plan it's this plan 20,000 transactions this gives me up to 20,000 transactions basically in an accounting period. So what is an accounting period? An accounting period is the period in which you are doing your accounts. So let's say for example you're doing accounts for 2024. It would be the entire year of 2024. However let's say you need to go all the way back and do accounts back in 2022. So 2022 2023 2024. You have to factor in all the transactions that you need to pull during those three years. And that then constitutes your accounting period. So it's basically the period in which you need to do work in. Once you kind of close that period and are finished, then you can kind of like add those credits onto the next accounting period. So that's kind of the way breezing works. Super simple. Now let's say you're an accounting firm or let's say you work in a company and you want to assign the billing to another person in the company or maybe you want to assign the billing to your client. Super simple. You just go to members. You can again add your client basically to join breezing. Uh you can give them always viewer role in organization and then down here you choose any role you want viewer editor and you can make them the billing manager. The billing manager has the right to basically subscribe on behalf of the workspace. Um the same goes for any kind of teammate. So if you're also inviting a teammate maybe you want to give them a slightly higher organization role maybe like an editor company role. Maybe you just want them to pay. So again you can you can bring in a teammate from your company. Maybe it's your CFO, maybe it's your VP of finance, maybe it's someone that you need to kind of bring in above you. You can kind of add them. Again, click the billing manager and then they'll be able to come in here and then subscribe and then choose kind of the right plan that really fits your company. Uh, super easy to do. This is kind of how you do it. Just go ahead and follow the basic step after you hit subscribe and let us know if you have any questions.
# Upload Transactions
Source: https://learn.breezing.io/getting-started/upload-transactions
Learn how to add your crypto transactions into Breezing securely and accurately via API or CSV, with support for 80+ blockchains and exchanges.
Breezing supports 80+ blockchains and exchanges to ensure all your clients' data is accurately recorded. You can add wallets and exchanges via API or CSV.
### Adding Wallets via API
Automate your crypto tracking by directly pulling data from blockchains. Breezing automatically scrapes all relevant chains for your wallet address, saving you from having to select networks manually.
1. On the left menu, click the **+ (New)** button next to Wallets.
2. Select **Blockchain**.
3. Enter the public wallet address (e.g., your Treasury wallet).
4. Select **via Network** to pull data directly via API.
5. Choose your date range (e.g., from 2023, or from the beginning of the wallet).
6. Click **Continue**. Breezing will automatically scrape all chains and pull in the transactions. You can navigate away or add another wallet while this processes in the background!
All right, cool. Now you got uh now you've subscribed, you're ready to go. You're now ready to add your wallets onto Breezing. So, pretty simple. You just go ahead and hit new over here. Then when you go hit new, it's going to give you kind of the option to add an exchange or a blockchain. Just go ahead and hit blockchain. And then once you're in the blockchain view, you just go ahead and select the wallet address that you're going to add. So, I'm going to click I'm going to choose this one. Go to continue. I'll call this one maybe my treasury wallet. There we go. Then I'm going to pretty much choose between network or CSV. You're going to choose network because you want to pull directly via the API. And then here you can select the from date and a to date. So it depends on how far back you want to go. Maybe you only want to pull starting in 2023. Maybe you want to pull from the beginning of the wallet. Whatever you want kind of super flexible and maybe you only want to pull like a specific period. Maybe 2024. You can also it's super flexible. And difference between us and different maybe subleasers that you use, you don't have to select the chain every time. So you don't have to add it add it once for Ethereum, add it once for Optimism, add it once for Polygon. You just go ahead and add it once and our system will automatically scrape all the chains. So once you've added it, you go ahead and hit continue. You'll see while it's adding transactions, you can also go around and hit dashboard. You can see kind of the transactions being loaded. On top of that, too, while that is happening, you can also add a second wallet address. So you can go ahead and hit wallets as well. You can hit blockchain again and you can add your second wallet address already simultaneously. So I'm going to go ahead and add my second wallet address. Going to hit call this one offs wallet. Hit continue again via network again. I'll just scrape the whole wallet basically. And then it's kind of pulling in. You'll see the Treasury wallet is done. It's kind of already pulled in all the transactions. So I'm pretty much good to go. And then I'm kind of done at that point. And I'm just waiting now for my Ash wallet.
***
### Adding Exchanges via API
Sync your crypto trading automatically from major exchanges like Binance, Coinbase, or Kraken.
1. Click the **+ (New)** button next to Wallets on the left menu.
2. Select **Exchange** and choose your exchange (e.g., Kraken).
3. Name your connection and select **via Network**.
4. Enter your **API Key** and **Secret Key** (generated from your exchange account). Enter an API password if your specific exchange requires one.
5. Select your desired date range.
6. Click **Continue**. Breezing will securely pull your trade history.
All right, cool. Now, I'm going to show you how to add an exchange basically via an API. So, you're just going to go ahead. There's a little plus button here on the left next to wallets. Go ahead and hit it. Here you got the option. You got an exchange or blockchain. I'm going to go ahead and hit exchange. I'm going to go ahead and select Kraken, basically. So, I got a couple options for Kraken. I'm going to select the original one. It's going to take me next page. I'm going to call this one Kraken. Go to continue. And here I'm going to have three options. Via network, via CSV file, via Kraken file. I'll show you what the other two are in a second, but first I'm just going to show you via network. Go ahead and hit via network. And here it's going to ask you for your API and secret key. So these two you actually get from Kraken itself. You got to go into Kraken and you can see pretty much how to generate basically a Kraken API key. Super simple. Just uh follow the rules. You can type in Kraken API key and it'll show you how to do it. Once you have those, just go ahead and throw in the API key here. Then you go ahead and throw in the secret key. And then some exchanges do require you a password. It's optional, but you know, just add it. And then you select the from date and to date, wherever kind of you want to start pulling from. Some people maybe want to pull maybe from just 2022 data up to, oh, one second. Maybe 2022 data, January up to, yeah, December 2024 data. So, you can be super customizing what data you want to pull. Um, and then once you're done, you hit continue and the system will start to pull in the transactions related to the Kraken CSV or sorry to the Kraken API. Nope, pretty fast. It's already done. You can see already there all them pretty clean. All inputed in there. Cool. Hope that helps.
***
### Uploading via CSV (Unsupported Wallets & Exchanges)
If an API integration isn't available for a specific wallet or exchange, you can easily use CSV imports.
#### 1. Exchange CSV Uploads
If an exchange is not supported via API, you can upload its raw ledger via CSV.
1. Export the raw CSV ledger from your exchange (e.g., Bybit, Kucoin).
2. In Breezing, click to add a new **Exchange**, name it, and select **via CSV**.
3. Click **Download CSV** to grab the official Breezing CSV template.
4. Copy the data from your exchange's export into the corresponding columns of the Breezing template:
* **Date / Timestamp**
* **Transaction Hash / ID**
* **Asset** (the token ticker)
* **Amount**
* **Fee**
5. **Set the Direction Column (`IN` or `OUT`)**:
* For deposits or inbound transfers, mark as `IN`.
* For withdrawals or outbound transfers, mark as `OUT`.
* *Tip in Excel:* You can use a formula like `=IF(AMOUNT>0, "IN", "OUT")` and drag it down.
6. **Handling Fees on Inbound Transactions (Crucial Step)**:
* Transaction fees are typically only recognized on outbound (`OUT`) transactions in Breezing.
* If a fee is tied to an inbound (`IN`) transfer, you must extract it into its own line item:
1. Duplicate the inbound transaction row.
2. On the original row, zero out the fee.
3. On the duplicated row, set the **Direction** to `OUT` and the **Type** to `fee`.
4. Zero out the token amount on this new row (since no tokens moved, only a fee was paid).
5. Keep the fee amount in the fee column.
7. **Format the Date Column**:
* Before saving, ensure your date format matches the exact format specified in the top row of the Breezing template.
* *Tip in Excel:* Right-click the Date column, select **Format Cells**, choose **Custom**, and paste the correct format.
8. Save your cleaned CSV.
9. Back in Breezing, click **Upload** and select your file.
10. **Enable Fiat Conversion**: Toggle **Fetch Fiat Amount** ON before submitting. This tells Breezing to automatically price the historical transactions.
11. Click **Upload Transactions**. The transactions will appear immediately, and the fiat amounts will populate shortly after as Breezing scrapes historical pricing.
All right, cool, guys. Next thing I'm going to show you, let's say I have this ledger um out of like a out of an exchange, and I want to add this exchange via CSV because potentially Breezing may not support it. So, way to do that is pretty simple. Let's go to add a wallet here. Go to exchange. I'm going to select one. Maybe I'll do by the bit one right here. I'll go to continue. I'll go to add via CSV. And then here, there's going to be a download CSV button. Go ahead and click that. It's going to download the CSV option right over here. And then now I got everything I need right here. So now what I need to do is I need to grab my CSV ledger that I pulled from Bybit. Let's say it's this one. I'm going to start copying the columns into the CSV in Breezing so that like I can start to upload. So I'm going to copy the data in here first. I'll take the deposit as well. Next, fill that one in here. I'll leave the wallet from wallet two blank. I'll blank out the rest of these guys. I'll take the ID, copy that in here, throw that in here as well. Direction, I'll do that in a bit. I'll take the asset and carry that in here as well. Throw the asset in there. Copy the same one with the fee. Then I'll look at the amount. Take that as well. Add that in there. Then I'll take the fee. Copy that like so. Throw that in here. And then I'll leave the amount, fiat item, fee, fiat amount empty. I do have to fill in the direction though. And for that you do kind of like a simple uh kind of statement. So you do if this one is greater than zero then in otherwise make it out basically. So I'm just telling the system this is the formula you can use. I'll just click this little thing down. I'll drag it all the way down just like that. So it's looking pretty good. The other thing I need to also verify is on the fees. Make sure that the fee is associated to the outbound transaction. If there's a fee associated to an inbound transaction like this one for example, you do need to add it separately. Um, fees on inbounds typically don't work here. So, what you got to do is you got to just take this one right here. Just copy it again. Put it in here. Zero out this fee. Call this one basically out. Zero out the fiat amount. Oh, sorry, the the token amount there. Make sure that's not the same. Keep it as a withdrawal. You can call this one type fee. And there you go. You got kind of everything you need here. You're ready to now start to upload this CSV in here. But before you do, there's a little date format. So, you got to kind of copy that date format in here as well into the CSV. Bring her down. Go to uh format cells. Go ahead and uh copy that in here like that. Hit format. Now, you just got to save the CSV and then come back to Breezing. Now, you got to upload that CSV. So, go ahead and hit upload. Go to your downloads. Should be somewhere. Oh, there it is. Click there. Now, you got an option here. It's going to tell you these are the accepted transactions. If there's any transactions that are wrong, it'll highlight them here and you can see it. Be sure to highlight the fetch fiat amount. That's pretty important because it'll fetch the fiat amounts. Hit upload transactions and then just watch your work. There it is. It's going to be converting to fiat shortly. But yeah, you can see all your transactions here. The amounts are here. The fee fiats are updating as we speak. Just got to give it a little bit of time. And there we go. They just updated. Just like that. Got your balance and you're all
#### 2. Unsupported Wallet CSV Uploads
1. Export the CSV from a block explorer (e.g., Etherscan) for your desired date range.
2. In Breezing, add a Blockchain wallet, name it, and select **via CSV**.
3. Download the Breezing template.
4. Copy over the Date, Transaction Hash, Asset ticker (e.g., ETH), Amount, and calculate the Direction (`IN` or `OUT`).
5. As with exchanges, allocate gas/network fees to the outbound transactions.
6. Format the Date column properly, save the CSV, and upload it into Breezing with the **Fetch Fiat Amount** toggle enabled.
All right, cool. Now, let's say you want to add some transactions on a chain that isn't yet supported on Breezing. It's totally doable. Just going to show you how it works. So, I'm just going to grab kind of a wallet address here. I'm going to go to Ether Scan. I'm going to put the wallet address in here. It's going to pull the wallets here. I'm going to go all the way down to the bottom. I'm going to click download CSV exports. This is again a way to get the data, but you can get the data in any possible way, however you want. Let me go to the dates. I'm going to bring it all the way back. Maybe 2019. Go ahead download. It's going to download the CSV for me. I'm going to open it up. All right, there it is. So now I got the CSV now from the blockchain explorer. This is an Ethereum CSV. So now I got to go back to Breezing. I'm going to hit add a wallet. I'm going to hit blockchain. I'm going to add the wallet address in there. I'm going to call it uh marketing wallet. Let's call it that for now. Going to continue. I'm going to select via CSV, not via network. That's how we usually pull via API. Via CSV. I'm going to hit download the CSV. It's going to give me this template over here. It's going to open up one second. So, there's my template. And now, I'm going to basically start matching the columns for each of these CSVs, for each of these templates with these ones. So, I'm going to grab I'm going to grab the date. Take the date one first. Put that date one in here. Going to grab the I transaction hash. Take the transaction hash. Put that one in there. I'm going to leave this empty for now. Um, then I know this is ETH. So, I'm going to put that down as ETH. ETH. ETH. ETH. ETH all the way. Go ahead and bring that down. You're good to go. I'm going to leave fiat amount amount fiat empty. Wallet front wallet 2 empty. I'll take the type. So, the type I'm just going to grab this one. Again, you can fill in whatever you want in these. There's no hardcoded areas, but these are the ones. Uh, these first columns right here, A to G, they've got to be filled in. H to L, you can kind of leave blank. However you want to do it there. Then I'm going to come back here. I'm going to grab the amount. So the these I know are like the inbound ones and these I know are like the outbound ones. So first I'm going to go like that. Probably just take the inbound ones. Again, your your data structure could be a little different than mine. All good. But I'm just going to do it this way. So these I know these are all my inbound ones. So I know basically if this one is greater than zero then I know it's in basically otherwise I'm going to call it out basically. There you go. Run that all the way down. My outbound ones are here now. So that's all solid and good. Um then I'm going to take my outbound ones. There's a couple outbound ones here. These are all zero anyway. So it's all good. Then I got some outbound ones here. Let's see there. These are the outbound ones. Then I'm going to take there's another outbound one there right above two above the 035. Put that one in there. There she goes. Then I'll take these ones all the way down to 0.94. Yeah, there she is. And then Yep. Then I got a zero in the end there. Okay, cool. So I take these ones, put them in there. Zero this out. I'm going to remember those ones because I also want to grab the fees. There's also some transaction fees there. So, I'll grab the transaction fees of these guys. Put those in there. This one. Move that over. There's a little transaction fee on that one as well. Again, the transaction fees are only on the outbounds. So, that you guys are aware. Remember, only outbounds are kind of transaction fees. Grab the transaction fees for these ones. Get those ones. Oh, first I'm going to move those over. One second. Move those over. Then get the transaction fees. Cool. And then that's it. These ones are all zero. So, zero these out all the way. Zero the rest. There we go. The feed is going to be zeroed out. And there we go. We have our CSV. Now, I need to I need to go back to breezing. Copy that date format. Got to make sure that date format's nice and nice. So, put that in there. Right click. Format cells. Go ahead. Okay. That. There you go. Then I'm going to save my CSV. Go back to Breezing. Click upload. There it is. I'm going to grab it. Showing me 31 transactions. The way to check that is just go back here. Go all the way down. What do we have? 31 transactions. So, we're looking good. Come back to breezing. Now, we want to toggle amount fiat on. So, make sure that it converts to fiat. And then, if there's any issues with your CSV, basically, uh the kind of system will tell you right over here there's an issue with the CSV. And then you can go ahead and fix it. Usually, it's a date issue. Once you're ready, upload that thing. Watch your work. I think it's already in there. Yeah. So, these transactions are in there now. And then you see they're just about to be converted to fiat. They just did. And there you go. You're all done. Your ETH is in there. Fiat's in there. All set. Uploaded wallet.
# Bexio
Source: https://learn.breezing.io/integrations/bexio
Connect Breezing to Bexio to sync your chart of accounts and push crypto transactions as manual journal entries into your Swiss books.
Breezing connects directly to Bexio, so Swiss businesses can keep their crypto subledger in Breezing and push clean journal entries into their books. You can connect one accounting tool at a time (Xero, QuickBooks Online, or Bexio).
### How to Connect Bexio
1. Navigate to **Chart of Accounts** on the left menu.
2. Click **Link accounts** and select **Bexio** in the "Link accounting" modal.
3. Click **Link**. You will be redirected to the Bexio login screen; sign in and approve the connection.
4. Back in Breezing, the Bexio card shows a green **Connected** badge.
5. Click **Sync Chart of Accounts** on the Bexio integration card to pull your accounts into Breezing.
*Note: whenever you add or change accounts in Bexio, come back and click **Sync Chart of Accounts** again to refresh the list.*
### Syncing Transactions to Bexio
Once your transactions are categorized, you can push them to Bexio individually or in bulk:
* **In bulk:** select the transactions on your Dashboard, open the **Manage** menu, and choose **Sync to Bexio**.
* **Individually:** open a transaction and use the sync option in the transaction details.
Each transaction becomes a manual compound entry in Bexio, carrying your debit and credit lines, the accounting description, and a `BREEZING` reference with the transaction ID so you can always trace an entry back to its source. Syncing the same transaction again updates the existing entry instead of creating a duplicate. After a sync, the transaction offers a **View journal on Bexio** link that opens the entry directly in Bexio.
If an entry was deleted on the Bexio side, Breezing clears the stale reference when you next sync and creates a fresh entry on the retry.
### What Bexio Supports
The Bexio integration covers chart of accounts sync and journal entry sync (create and update). Compared to the Xero and QuickBooks integrations, it currently does not include creating accounts from Breezing, the duplicate journal scan, tracking categories or classes, invoice payments, or journal attachments. If you need one of those workflows, the [CSV journals export](/advanced-features/csv-journals) is a good complement.
### Disconnecting Bexio
Click **Disconnect** on the Bexio integration card. Your synced chart of accounts stays in Breezing, but you won't be able to sync accounts or push journals until you reconnect.
# Supported Blockchains & Exchanges
Source: https://learn.breezing.io/integrations/blockchains-exchanges
Breezing integrates natively with 80+ blockchains and exchanges, with automatic chain detection and CSV imports for everything else.
Breezing is built to be a single source of truth for your crypto accounting. Whether your clients are trading on centralized exchanges or interacting with decentralized smart contracts across multiple networks, Breezing captures it all.
Click here to view our live, continuously updated list of every supported blockchain and centralized exchange.
### Automatic Chain Detection
Unlike other crypto subledgers where you must manually add a wallet address *for every single network* it interacts with (e.g., adding it once for Ethereum, again for Polygon, again for Arbitrum), **Breezing does this automatically**.
Simply input an EVM wallet address once, and Breezing will automatically scrape all supported networks simultaneously to find and import the transactions.
***
### Working with Unsupported Networks & Exchanges
While Breezing natively integrates with dozens of the most popular platforms via API, you are never locked out of doing your accounting if a specific chain or exchange isn't natively supported yet.
* **Unsupported Exchanges:** If an exchange isn't listed or API access is restricted, you can instantly upload your raw ledger export using our [Exchange CSV feature](/getting-started/upload-transactions#1-exchange-csv-uploads).
* **Unsupported Blockchains:** If you have transactions on a niche or unsupported chain, you can import them using our [Unsupported Wallet CSV feature](/getting-started/upload-transactions#2-unsupported-wallet-csv-uploads).
# QuickBooks Online
Source: https://learn.breezing.io/integrations/quickbooks
Connect QuickBooks Online to Breezing to automate journal entries from your crypto transactions and keep your books accurate and audit ready.
Breezing supports QuickBooks Online out of the box. Connect your QuickBooks account to automate the creation of journal entries from crypto transactions.
### How to Connect QuickBooks Online
1. On the left-hand navigation menu in Breezing, click on **Chart of Accounts**.
2. You'll see two options: "Link accounts" or "Upload CSV". Click on **Link accounts**.
3. A connection modal will appear. Select the specific QuickBooks company you want to connect to Breezing and click **Connect**.
4. Once authenticated, you will be redirected back to Breezing.
5. **Crucial Step:** Click **Sync Chart of Accounts** on the QuickBooks integration card. This will pull in all your accounts from QuickBooks directly into Breezing so you can start mapping your transactions.
### Updating Accounts
If you ever add, remove, or change the name of an account in your Chart of Accounts, you must update it in Breezing to ensure your journal entries map correctly:
1. Go to QuickBooks Online first and make the necessary changes to your Chart of Accounts.
2. Come back to Breezing and navigate to **Chart of Accounts**.
3. Click **Sync Chart of Accounts** on the QuickBooks integration card. This will refresh and pull in the latest changes you made in QuickBooks.
All right, cool. So, to link QuickBooks, it's pretty simple. You're on the dashboard here. Go to the left and you can go ahead and click chart of accounts. Once you're there, you got two options. Link accounts, upload CSV. Hit link accounts there. Go ahead and hit the link account button. Should take you to the next page. Give her a second. It's going to go ahead and tell you to connect DTO to Breezing, which is the QBL that I want. Connect. And one second. Yeah, there you go. Then it's going to go remember here to always hit get accounts. And when you hit get accounts, it'll bring in all your accounts. And then you're kind of ready to go. If you ever want to change, let's say, your accounts here in Breezing, just remember you got to go ahead and change them first in QuickBooks. Then come back over here, hit link accounts, and then go ahead and just hit get accounts again. It'll refresh all those accounts later on. So that's super important to remember. And make sure you do that. Go.
***
### Instantly Updating Journal Entries
One of Breezing's most powerful features is the ability to instantly update a journal entry that has *already* been synced to QuickBooks, without having to delete the journal in QuickBooks first.
If you accidentally booked a transaction to the wrong account, or if you recalculated your gains and losses and the cost basis numbers shifted:
1. **Do not delete the journal in QuickBooks.**
2. Make the change directly in Breezing (e.g., change the account label to "Accounting", or rerun the Gain/Loss calculation).
3. Click the **Sync** button on the transaction again (or use the Bulk Sync feature for multiple).
4. Breezing will automatically find the existing journal entry in QuickBooks and overwrite it with the updated numbers and categorization!
all right cool so this is one of the best things about breezing actually it's USB really um is to update Journal entri that have already been synced in zero so I just kind of take an example right here let's say this one right here it's been labeled as legal expenses I'm going to ahead and click the journal button so I'm going to view it over here the link here's a journal it's been booked to Legal expenses but let's say I changed my mind and I actually didn't want to book this legal I wanted to book this into accounting so I'll go ahead and hit accounting I'll save it and then I'll resync the journal now now this is the exact same Journal it's in legal expenses basically now if I just refresh the page it's now been added to Consulting so this goes the same thing as well so let's say I changed my mind and I want to and I you know I didn't have my cost bases correctly I want to recalculate gains and losses so let's say I decide to change my method I'm like actually I didn't want to use f weighted average I wanted to use H fifo let's say I recalculate with fifo recalculate all my gains and losses basically and then I'm going to go back to that exact transaction that I had earlier one second so now that transaction that I had put in legal earlier I got to find it somewhere oh it's right here it's in accounting now that is now the journal entry so if you click over here I'll just show you to you the weighted the gains and losses was 2537 because it was on weighted average if you remember so now if I go down I see the gains and losses is now 26 so it's slightly different than 2537 now how do I update that journal I don't delete the journal never ever delete the journal in zero just go ahead and just save it and you can resn it and when you do that let's go back to the journal itself you refresh there's the update so um this is one of the key USBS the key USBS in breezing that kind of no other Subler can do so far you can also do it in bulk so you can select all and just resync them all and it'll update every single Journal so again hit manage sync journal and it updates everything all at the same time for you so yeah that's one of the key USBS I hope you like it works the exact same way in QuickBooks by the way if you want to kind of update the QuickBook journal the exact same way cool
***
### Assigning QuickBooks Contacts (Customers & Vendors)
If you track specific Customers or Vendors in QuickBooks, you can assign them directly to wallet addresses in Breezing so they sync perfectly onto the journal entry.
1. Navigate to the **Contacts** tab in Breezing.
2. Find the wallet address you want to map (e.g., a wallet you named `MME Legal`).
3. Click **Refresh Entities** to pull your live Customer/Vendor list directly from QuickBooks.
4. Open the dropdown next to the contact and select the corresponding QuickBooks entity.
5. Click **Save**.
6. From now on, every time a transaction from that wallet is synced, it will automatically tag that specific Customer or Vendor in QuickBooks.
all right now I'm going to show you how to assign basic customers and vendors to contacts in breezing and this is pretty important because you need that to close invoices in QuickBooks or bills uh so this is kind of the first step to that so basically go ahead and hit contacts let's say you find that you need to find one of your contacts let's say this contact right here was an mme contact go ahead and add them as mme legal and then in QuickBooks you want to pull all the entities that you have these are the customers and vendors hit refresh entities it'll pull them all you click on it you'll see that's MMA legal go ahead and select it save it so now every single Journal that's synced that has the mme legal will basically sync with that specific customer and vendor so you have kind of better tracking cool
***
### Adding QuickBooks Cost Centers (Classes)
If you use Classes in QuickBooks to track cost centers, you can assign them to your crypto transactions inside Breezing before syncing.
1. Click into any transaction on your Dashboard to open its details.
2. Look for the **Class** section and click **Get Classes**. This fetches your live Classes from QuickBooks.
3. Select the appropriate Class from the dropdown list.
4. Click **Save**.
5. When you click **Sync to QuickBooks**, the transaction will carry that Class over to the resulting journal entry.
all right cool so for this video guys I'm going to show you how to sign basically a cost center or a class from QuickBooks into breezing so that you can sync it with that transaction go ahead and click the transaction you'll see this little class button in here go ahead and hit get classes and here you'll see all the classes Associated to kind of the one you want go ahead and select the one you want hit save and then when you're ready just sync to QuickBooks and that's it that's kind of how you select basically bring in cost centers from QuickBooks basically into breezing and then kind of Select them and then sync them they'll sync directly with the as well
***
### Closing QuickBooks Invoices & Bills Directly
Breezing allows you to close open Invoices (A/R) or Bills (A/P) in QuickBooks without using a messy crypto clearing account.
*Important Prerequisite: You must first map the Breezing Contact to a QuickBooks Customer/Vendor (see the Assigning Contacts step above).*
1. Ensure the wallet address involved is properly mapped to the QuickBooks Vendor/Customer under the **Contacts** tab.
2. On your Dashboard, find the crypto transaction you used to pay the bill (or receive payment for the invoice). Click to open its details.
3. In the **Transaction Account** dropdown:
* To close an **Invoice** (receiving money), select your `Accounts Receivable` account.
* To close a **Bill** (sending money), select your `Accounts Payable` account.
4. Click **Save**, then click **Sync**. Breezing will push a journal entry to QuickBooks hitting the A/R or A/P ledger for that specific Customer/Vendor.
5. In QuickBooks, navigate to that Customer or Vendor. You will see their open Invoice/Bill alongside the new Journal Entry Breezing just pushed.
6. Click **Receive Payment** (or **Pay Bill**), select both the open invoice and the matching journal entry, and clear them against each other!
All right, guys. I'm going to show you how to close basically an invoice in QuickBooks from Breezing without having to use a clearing account. So, here I got an invoice or a bill. It could be either one invoice or bill in QuickBooks. Enemy legal. It's for a,000 bucks. I'm going to go to Breezing now and I'm going to find basically that specific one. So, here I got it right over here. This is my enemy legal for a,000 bucks. This is what I want to use to close it. Now, it's important um when you have Emmy legal to basically make sure in the contacts page. So go to contacts, go to MMU legal. Make sure you have the entity MME legal assigned to this specific contact in Breezing because this tells Breezing that this contact belongs to this customer in QuickBooks. And the way you do that, you hit refresh entity and then you just select enemy legal and that's the one you're going to use. So go ahead and hit save. Go back to the Treasury Wallet, the one you want to use to kind of close that bill. You go ahead and find the USDT transaction. Click on it. Open it right here. Here on the transaction account, you want to select accounts receivable. Go ahead and select it. Hit save. Then go ahead hit sync. For accounts payable, you just select the accounts payable account. Same kind of thing. So now it's synced it into QuickBooks. Now you go back to QuickBooks. Now here for MM Legal, you'll see the pay the invoices here. Just got to refresh. And then you should see the journal in one second. There's the journal. Basically, that will close that invoice. The way you do it is go ahead and kind of like hit receive payment. Give it a few seconds. There it is. You kind of just select it to close it. And then you can kind of clear the payment. And that's basically how you close invoices from breezing um in QuickBooks. Um on bills, it also works same way on bills except for bills. You just select accounts payable. Um somewhere in there it should be AP. Yep. Yeah. Cool. Let me know if you have any questions.
***
### Finding & Deleting Duplicate Journals
If a sync was retried at the wrong moment, QuickBooks can end up with two journal entries for the same transaction. The duplicate scan finds and removes them:
1. Navigate to **Chart of Accounts** and find the QuickBooks integration card.
2. Click **Find Duplicate Journals**.
3. Scope the scan with the date range and options in the panel, then click **Start scan**. The scan runs as a background task.
Breezing identifies duplicates by the Breezing transaction reference on each journal entry, keeps one entry per transaction, and deletes the extra copies. Note that QuickBooks journal entries are deleted permanently (QuickBooks does not support voiding journal entries), so review the scan scope before starting. Run the scan again if duplicates were found, until a pass comes back clean.
# Xero
Source: https://learn.breezing.io/integrations/xero
Connect Breezing to Xero to sync journal entries, update existing journals, assign tracking categories, and close invoices.
Breezing integrates directly with Xero. Crypto accounting integration doesn't have to be complicated.
### How to Connect Xero
1. Navigate to **Chart of Accounts** on the left menu.
2. Click **Link accounts**.
3. Select **Xero**. You will be redirected to the Xero login screen.
4. Enter your Xero email and password.
5. Select the Xero organization you want to connect to this specific Breezing company.
6. Once connected and redirected back, make sure to click **Sync Chart of Accounts** on the Xero integration card. This pulls your entire Xero chart of accounts into Breezing.
*Note: If you ever change or add an account in Xero later, you must come back here and click **Sync Chart of Accounts** again to refresh the list.*
***
### Syncing Journal Entries to Xero
With a single click, Breezing pushes your mapped transactions to Xero as draft or approved manual journals, ensuring your general ledger reflects all crypto activity accurately.
**Syncing a Single Transaction:**
1. From the dashboard, label/categorize a transaction (e.g., set the label to "Legal" or add a custom description like "Dev Work").
2. Click on the transaction to open its details.
3. At the top, you'll see a **Sync to Xero** button (the last sync will say "Never").
4. Choose whether to sync just the Fee/Loss or the **Full Journal**.
5. Click **Sync**. A link to the journal entry will appear. You can click it to open the exact journal entry directly inside Xero!
**Bulk Syncing:**
1. On your Dashboard, check the boxes next to multiple categorized transactions.
2. Click the **Manage** dropdown menu at the top of the list.
3. Select **Sync to Xero**.
4. All selected transactions will be pushed simultaneously.
***
### Instantly Updating Journal Entries
One of Breezing's most powerful features is the ability to instantly update a journal entry that has *already* been synced to Xero, without having to delete the journal in Xero first.
If you accidentally booked a transaction to "Legal" but meant to book it to "Accounting", or if you recalculated your gains and losses and the cost basis numbers shifted:
1. **Do not delete the journal in Xero.**
2. Make the change directly in Breezing (e.g., change the account label to "Accounting", or rerun the Gain/Loss calculation).
3. Click the **Sync** button on the transaction again (or use the Bulk Sync feature for multiple).
4. Breezing will automatically find the existing journal entry in Xero and overwrite it with the updated numbers and categorization!
all right cool so this is one of the best things about breezing actually it's USB really um is to update Journal entri that have already been synced in zero so I just kind of take an example right here let's say this one right here it's been labeled as legal expenses I'm going to ahead and click the journal button so I'm going to view it over here the link here's a journal it's been booked to Legal expenses but let's say I changed my mind and I actually didn't want to book this legal I wanted to book this into accounting so I'll go ahead and hit accounting I'll save it and then I'll resync the journal now now this is the exact same Journal it's in legal expenses basically now if I just refresh the page it's now been added to Consulting so this goes the same thing as well so let's say I changed my mind and I want to and I you know I didn't have my cost bases correctly I want to recalculate gains and losses so let's say I decide to change my method I'm like actually I didn't want to use f weighted average I wanted to use H fifo let's say I recalculate with fifo recalculate all my gains and losses basically and then I'm going to go back to that exact transaction that I had earlier one second so now that transaction that I had put in legal earlier I got to find it somewhere oh it's right here it's in accounting now that is now the journal entry so if you click over here I'll just show you to you the weighted the gains and losses was 2537 because it was on weighted average if you remember so now if I go down I see the gains and losses is now 26 so it's slightly different than 2537 now how do I update that journal I don't delete the journal never ever delete the journal in zero just go ahead and just save it and you can resn it and when you do that let's go back to the journal itself you refresh there's the update so um this is one of the key USBS the key USBS in breezing that kind of no other Subler can do so far you can also do it in bulk so you can select all and just resync them all and it'll update every single Journal so again hit manage sync journal and it updates everything all at the same time for you so yeah that's one of the key USBS I hope you like it works the exact same way in QuickBooks by the way if you want to kind of update the QuickBook journal the exact same way cool
***
### Adding Xero Tracking Categories (Cost Centers)
If your organization uses Xero Tracking Categories to allocate costs to specific departments or regions (e.g., Marketing - New York vs. Ops - US), you can assign them directly in Breezing before syncing.
1. Open the transaction details in Breezing.
2. Click the **Get Tracking Categories** button. This pulls your live Cost Centers from Xero.
3. A dropdown will appear containing your categories (e.g., `Marketing New York`, `Ops US`).
4. Select the appropriate tracking category and click **Save**.
5. When you sync this journal, the tracking category will automatically be applied to the entry in Xero.
6. *Note: Just like regular accounts, if you choose the wrong cost center, simply change it in Breezing and click Sync again to instantly update the Xero journal!*
all right so now what you want to do is you want to look at maybe assigning cost centers to specific transactions in reeing before you sync them so this is kind of an interesting little feature we're kind of the only one that has that so I'm going to go maybe to one of these transactions over here I'm going to hit get tracking categories this is from zero so I want to B to get the cost stand from zero hit get tracking categories I'll see it over here I got some so here are all my tracking quiries I'm going to click on this marketing New York one I'll hit save go ahead and hit save basically and then go ahead and view the journal like that cck there and then here I see it's added pretty much the tracking category so if I decid to change the track and Cory actually it wasn't New York it was probably Ops um us I'm going say change it to Ops us resync the journal and it is right now marketing New York go ahead and just sync it again and it'll update basically to Ops us basically so yeah that's kind of how it works that's kind of how the track and category mechanism works let me know if you have any questions
***
### Closing Xero Invoices & Bills Directly
Instead of using a messy clearing account to reconcile crypto payments against fiat bills in Xero, Breezing lets you close Xero invoices directly against on-chain transactions.
1. Ensure you have an open Bill or Invoice in Xero (e.g., a \$1,000 USD bill).
2. In Breezing, find the outbound crypto transaction that was used to pay that bill (e.g., an outbound transfer of 1,000 USDC).
3. Click into the transaction details.
4. Click the **Get Invoices** button. Breezing will query Xero for all open payables/receivables.
5. Select the corresponding Xero Invoice from the dropdown list.
6. Enter the amount being paid. *(Note: If your Xero account base currency is CHF but the invoice is USD, enter the exact USD invoice amount. Breezing will handle the conversion math).*
7. Click **Submit Payment**.
8. The payment is instantly posted to Xero, marking the bill as Paid from your crypto asset account!
9. **Final Step:** Because the principal amount was closed against the invoice, you still need to account for the blockchain network fee and any realized gain/loss. Click **Sync** and select **Fee & Gain/Loss only** to push the remaining journal lines to Xero.
All right, cool guys. So, in this video, I'm going to show you how to close a bill in zero from Breezing. Um, and the way it works is like this. I have a bill here. It's called Rafa. I'll click on it. This bill is for a,000 USD. So, imagine it's for in USDC or USDT. Let's say it's in stable coins. So, it's a crypto invoice that's in zero. And now, you want to close it, right? Usually, you would use a clearing account to do that. But with Breezing, you don't even have to do that. You can just close it from Breezing. I'll show you how it's done. So, I'm going to go into Breezing. I'm going to find let's say yep go to breezing. I'm going to find basically the transaction that I want to close it with for like a th00and USDT. Let me just try and find it first. Go to treasury. See if I can find one here. So I got this transaction here. I'm going to use to close it. I'm going to click it open. I'm going to hit get invoices. What it's going to do is it's going to find all the open payables and receivables. Sorry, all the open payables. It's outbound transaction. And it's going to basically pull them into breezing. I'm going to click this. I'm going to see, oh, here's that invoice. It's for a,000. This was the ra invoice if you remember, right over here for a,000 USDC. I'm going to go ahead and select it. And then I'm going to go ahead and submit. So, I'm going to go ahead and put actually a,000 basically here. So, the amount you saw earlier was the CHF equivalent of a,000. My breezing account is in CHF and my zero accounts in CHF. So, I need to kind of like add in the corresponding USD amount here. But don't worry, it'll post it correctly from a conversion perspective in a second. I'll hit submit payment and then it will appear down over here. So the invoice was paid. You see it right over here. I'm going to go ahead and click that one and it'll open up the payment. So that's the payment that was made. It's made against a USDT account. So this is an asset account pretty much. So this is my USDT. It's an asset account. The payment can be made from either a bank account or an asset account. Either one works. But the payment gets posted and it also gets posted in the CHF equivalent basically. And then finally, what you got to do though is because it was because it's an asset account, you now need to post also the fee and the gains and losses associated transaction. And the way you do that is you just click sync and you just sync the fee and the gain or loss alone. Give it one second. And there you go. So that one's kind of also been synced. And then pretty much now you kind of have closed the bill. You sync the gain and loss. Um, and you're kind of all set to go. Thanks.
***
### Paying Without an Invoice (Bank Transactions)
The **Submit payment on Xero** button in the transaction view is not limited to closing invoices. On an outbound transaction with no invoice selected, Breezing asks whether to create a standalone bank transaction instead:
1. Open the outbound transaction and click **Submit payment on Xero** without selecting an invoice.
2. A dialog titled "No invoice selected" explains that this creates a standalone spend money bank transaction in Xero rather than applying a payment to an invoice. Click **Create bank transaction** to confirm.
3. Breezing creates the bank transaction in your mapped Xero bank account, with the amount, fee, and any realized gain/loss carried as separate lines and a Breezing reference for traceability.
If a payment is larger than the invoice it settles, Breezing detects the overpayment and offers to sync the difference as a realized gain or loss; click **Record Gain/Loss** to accept. Payments require an outbound transaction and a Xero account of type bank.
### Finding & Deleting Duplicate Journals
If a sync was retried at the wrong moment, Xero can end up with two journals for the same transaction. The duplicate scan finds and removes them:
1. Navigate to **Chart of Accounts** and find the Xero integration card.
2. Click **Find Duplicate Journals**.
3. In the "Find & delete duplicate journals" panel, scope the scan: journal status (**DRAFT** or **POSTED**), a date range, a modified-since date, and optionally a page range for very large Xero organisations.
4. Click **Start scan**. The scan runs as a background task.
Breezing identifies duplicates by the Breezing transaction reference embedded in each journal, keeps one journal per transaction, and voids the extra copies in Xero. As the panel notes, run the scan again if duplicates were found, until a pass comes back clean.
### Attaching Evidence to Xero Journals
Files attached to a transaction in Breezing can be pushed onto the matching Xero journal with one click, so your evidence lives in both systems. See [Transaction Attachments](/features/transaction-attachments) for the full flow.
# Introduction
Source: https://learn.breezing.io/introduction
Breezing automates crypto accounting for accountants with blockchain, exchange, and Xero or QuickBooks integrations.
Breezing simplifies crypto accounting by connecting directly to blockchains, exchanges, and accounting systems like Xero and QuickBooks. We make crypto accounting a breeze for 200+ businesses.
## Why Breezing?
Managing crypto transactions for your clients doesn't have to be a nightmare of spreadsheets and manual journal entries. Breezing is built specifically for accountants, ensuring:
* **Zero Chain Friction:** No need to manually select chains; Breezing identifies them automatically from the wallet address.
* **Time Savings:** Automatically detect, label, and hide spam transactions.
* **Direct Syncing:** Push and update journals directly in Xero and QuickBooks Online.
* **Easy Collaboration:** Highlight transactions and invite your clients to review them without exposing the entire general ledger.
## Explore the Docs
Get your workspace set up in minutes.
Connect wallets and exchanges via API or CSV.
Map accounts and sync journals directly to Xero.
Automate your Web3 accounting in QuickBooks.
Build integrations with the Breezing API.
# Connect Your AI Agent
Source: https://learn.breezing.io/mcp/connect
Connect Claude Code, Claude Desktop, Cursor, and other MCP clients to your Breezing workspace with an API key or the one-click OAuth flow.
Connect any MCP-compatible client to Breezing in a couple of minutes. First create an API key, then pick a connection method below.
### Prerequisites
Before connecting, you need a Breezing API key:
1. Open the profile menu in the top-right corner of Breezing and select **Account Settings**
2. Open the **API Keys** tab
3. Click **Create API Key** to generate a new key, then assign it to one or more companies with `read` or `write` access
Copy your API key right after creation. It won't be shown again. Your key uses the `brz_` prefix.
Each key carries a per-company access level. A `read` key can call read tools only; a `write` key can also create and update data. Assign `write` if you want your agent to categorize, create, or sync.
### Claude Code
The fastest way to connect. Run this in your terminal, replacing `brz_your_api_key` with your actual key:
```bash theme={null}
claude mcp add breezing --transport http https://mcp.breezing.io/mcp \
--header "Authorization:Bearer brz_your_api_key"
```
Claude Code now has access to your Breezing workspace.
### Claude Desktop
Open the **Connectors** panel in Claude Desktop, click the **+** button, and select **Add custom connector**.
Set the name to **Breezing** and the URL to `https://mcp.breezing.io/mcp`, then click **Add**.
Click **Connect** to initiate the connection.
Paste your Breezing API key (starts with `brz_`) and click **Approve**.
### Cursor and other MCP clients
Most clients that support remote MCP servers accept a configuration block. You have two ways to authenticate.
**Option A: Connect button (recommended).** Add just the URL. The client shows a **Connect** button that opens Breezing's authorization page, where you paste your API key once.
```json theme={null}
{
"mcpServers": {
"breezing": {
"type": "streamable-http",
"url": "https://mcp.breezing.io/mcp"
}
}
}
```
**Option B: Direct API key.** Pass your key in the `Authorization` header.
```json theme={null}
{
"mcpServers": {
"breezing": {
"type": "streamable-http",
"url": "https://mcp.breezing.io/mcp",
"headers": {
"Authorization": "Bearer brz_your_api_key"
}
}
}
}
```
### Clients without native remote support
For clients that can only launch local commands, bridge to the remote server with `mcp-remote`:
```json theme={null}
{
"mcpServers": {
"breezing": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.breezing.io/mcp",
"--header",
"Authorization:Bearer brz_your_api_key"
]
}
}
}
```
The config file location depends on your client. For Claude Desktop, see [modelcontextprotocol.io/quickstart](https://modelcontextprotocol.io/quickstart/user) to find it on your system.
# Example Prompts
Source: https://learn.breezing.io/mcp/examples
Example prompts for the Breezing MCP server covering categorization, balances, wallets, assets, gain/loss, and syncing to Xero and QuickBooks.
Once connected, try asking your AI agent any of these. Swap in your own wallet names, account codes, and dates.
**Categorization**
> * Categorize my uncategorized transactions from the last 30 days
> * Show me transactions that need client review and explain why they were flagged
> * Apply rule 12 retroactively to all existing transactions
**Transactions**
> * Add these 20 transactions to the Treasury wallet from the data I'll paste
> * Group transactions 4821 and 4822 as a single internal transfer between my wallets
> * Group the USDC outflow and the ETH inflow from May 12 into a trade
> * Roll up last month's mining payouts on the Mining wallet into daily summary rows
> * Refresh the fiat values for transactions missing prices using market prices
> * How many transactions are still uncategorized this quarter?
> * Who edited transaction 4821, and what did the fields look like before?
> * Lock all of March's transactions now that the month is reconciled and synced
> * Unlock transactions 4821 and 4822 so I can fix their categories
**Balances and Wallets**
> * What are my current wallet balances?
> * Recalculate balances for the Treasury wallet
> * Add a new Ethereum wallet at 0xabc... and start syncing from January 1, 2025
**Assets and Token View**
> * Which token assets are missing GL account mappings?
> * Map USDC to account code 1100 in Token View
> * Mark all assets with zero historical volume as spam
**Reports and Gain/Loss**
> * Run a fresh gain/loss calculation using FIFO with a cutoff of December 31, 2025
> * Generate a token report for 2025 and pull the details once it's done
> * Run an explorer balances reconciliation on the Treasury wallet and flag any mismatches
> * Regenerate report 42 now that the gain/loss numbers are updated
> * List my reports and pull the details for the latest token NGL report
> * What active issues are blocking my month-end close?
**Company Settings**
> * Switch our cost-basis method to FIFO and then recalculate gain/loss
> * Set the default net gain and net loss accounts to code 80
**Accounting Sync**
> * Refresh the QuickBooks chart of accounts and show me what's new
> * Sync transactions 1001 through 1050 to Xero
> * Check what's already booked in Xero for transaction 512, then submit the payment against the open invoice
> * Book the net gain/loss journal on Xero for transaction 733
> * Create a new QuickBooks expense account for "Crypto Trading Fees"
> * Sync March's reconciled transactions to Bexio
# Breezing MCP Server
Source: https://learn.breezing.io/mcp/introduction
Connect AI agents like Claude to your Breezing crypto accounting workspace with the Model Context Protocol to categorize, reconcile, and sync transactions.
The Breezing MCP Server gives AI agents like Claude direct access to your crypto accounting workspace. MCP (Model Context Protocol) is an open standard that lets AI tools connect to external data sources, so you can categorize transactions, run rules, calculate gain/loss, and sync to Xero, QuickBooks, or Bexio without leaving your AI workflow.
It exposes the same surface as the [Breezing Public API](/api-reference/introduction), wrapped as MCP tools and guided prompts. Every action runs against your live workspace using your own API key, scoped to the companies and access levels that key carries.
New here? Head to [Connect Your AI Agent](/mcp/connect) to create an API key and link Claude or another MCP client in a couple of minutes.
### What You Can Do
With the Breezing MCP Server, your AI agent can:
* **Categorize transactions**: list uncategorized transactions, assign contra and asset accounts in bulk, set status, and add notes
* **Create transactions**: add up to 500 transactions to a wallet in one call, with automatic contact creation and internal-transfer detection
* **Group internal transfers**: mark the two legs of a wallet-to-wallet move as a single internal transfer
* **Group trades**: pair opposite buy and sell legs into linked trades, the same way the dashboard groups them
* **Consolidate transactions**: roll up many small transactions into daily or monthly summary rows per token
* **Update token prices**: recompute fiat values from historical market, custom, or on-chain prices
* **Manage wallets**: view connected wallets, create new chain wallets, and trigger incremental syncs
* **Browse and update assets**: look up token assets, update GL account mappings for Token View, and flag spam tokens
* **Check balances**: get current or historical token balances and recompute daily snapshots
* **Manage contacts**: list, create, and update counterparty addresses to give transactions clearer context
* **Build automation rules**: list, create, update, and retroactively apply rules that auto-categorize matching transactions
* **Track active issues**: surface uncategorized transactions, missing prices, and broken syncs blocking the close
* **Inspect edit history**: see who changed a transaction, when, and what the previous values were
* **Lock and unlock transactions**: finalize reconciled transactions so their figures stay fixed when closing a period, and reopen them when corrections are needed
* **Calculate gain/loss**: trigger a fresh net gain/loss run with average, FIFO, LIFO, or HIFO cost basis
* **Run reports**: generate token, account, and explorer balance reconciliation reports, regenerate existing ones, and pull computed detail rows
* **Tune company settings**: update the cost-basis method, balance sheet setup, and default fee, gain, and loss accounts
* **Refresh and sync accounting integrations**: pull the latest charts from Xero, QuickBooks, and Bexio, then push journal entries
* **Book Xero payments and journals**: apply invoice payments, create spend or receive money entries, and submit gain/loss journals for single transactions
* **Monitor background tasks**: see what wallet syncs, report runs, and rule applications are in progress
### Explore the Guide
Create an API key and connect Claude Code, Claude Desktop, Cursor, or any MCP client.
Browse all 59 tools, grouped by resource, with read and write access notes.
Three built-in workflows for categorizing, reconciling, and mapping assets.
Copy-and-paste prompts to try once your agent is connected.
# Guided Prompts
Source: https://learn.breezing.io/mcp/prompts
Use the Breezing MCP server's guided prompts to categorize transactions, report reconciliation status, and map token assets to GL accounts.
The Breezing MCP Server ships with three guided prompts. Each one walks your AI agent through an end-to-end workflow using the right combination of tools. In clients like Claude Desktop the prompts appear in the prompt picker; in Claude Code they show up as slash commands.
### categorize-transactions
A step-by-step workflow for assigning contra and asset accounts to uncategorized transactions. It reads your chart of accounts and balance sheet setup, fetches uncategorized transactions in batches, and for each one uses the wallet names, direction, token, and counterparty as context to choose an account.
It flags internal transfers and exchange trades for the Auto Apply Account feature, always uses numeric account codes from the chart of accounts, leaves status changes to you, and recommends creating a Rule for recurring patterns.
Scope categorization to a single wallet instead of the whole company.
### reconciliation-status
Generates a reconciliation progress report showing categorization coverage, client review items, and sync readiness. It counts transactions across the full status lifecycle (notStarted, reviewRequired, reconciled, manuallyReconciled, paid), plus uncategorized and spam counts, then presents a summary table with actionable next steps, such as how many transactions are ready to sync or pending client review.
### map-asset-accounts
Sets up Token View GL account mappings for your token assets. It checks your balance sheet setup first: in Token View it maps each token to one global GL account across all wallets, and for Wallet or Combined View it explains that asset accounts are set per transaction with Rules instead. A common pattern is grouping tokens under accounts like "Crypto Assets - ETH" or "Crypto Assets - BTC", with a generic "Other Cryptocurrencies" account for minor tokens.
# Available Tools
Source: https://learn.breezing.io/mcp/tools
Reference for every Breezing MCP tool, grouped by resource, covering transactions, wallets, assets, balances, rules, reports, and accounting sync.
The MCP server exposes 59 tools that mirror the [Breezing Public API](/api-reference/introduction). Every tool name follows a `resource_action` pattern, for example `transactions_list` or `rules_create`. Each card below links to the matching API reference page, where you can see the full parameters and response shape.
### Access and Scope
* Every tool except `companies_list` requires `orgId` and `companyId`. Call **`companies_list` first** to find the org and company IDs your key can reach, along with the access level on each.
* **Read** tools (the `_list`, `_get`, and `_count` actions) work with any key. Every other tool mutates data and requires `write` access on that company, otherwise it returns `403`.
* There are no delete tools. The API is mutate-only; use the Breezing dashboard for destructive actions.
### Long-Running Operations
Some tools start a background job and write a row to the tasks list: `wallets_create`, `wallets_sync`, `transactions_create`, `transactions_updatePriceAuto`, `balances_calculate`, `ngl_calculate`, `active_issues_refresh`, and `rules_apply`. While one is in flight for the same company or wallet, a duplicate call returns `409 TASK_IN_PROGRESS`. The exception is `wallets_create`: creating another wallet is always allowed, since each call targets a new wallet.
The accounting sync tools (`xero_sync`, `qbo_sync`, and `bexio_sync`) run synchronously and respond once the journals are accepted or rejected, but they also return `409 TASK_IN_PROGRESS` while a dashboard-initiated batch sync is running for the company.
The report tools (`reports_create_token`, `reports_create_account`, `reports_create_explorer_balances`, `reports_regenerate`) also run in the background and return the report and task IDs immediately, but parallel report creation is allowed, so they are not blocked by the 409 guard. Poll `tasks_list` or `reports_get` until the report leaves `pending`/`progress`, and avoid re-submitting the same parameters while one is pending. `reports_regenerate` returns `409` only while the target report itself is still generating.
Call `tasks_list` first to check for in-progress work, and again before reading derived data such as balances or reports. Overlapping runs can corrupt computed state.
### Tools by Resource
List the companies your API key can access. Always call this first to find org and company IDs.
Get the accounting configuration and chart of accounts, or update accounting settings.
List, count, get, create, update, batch update up to 500, view edit history, group internal transfers or trades, consolidate, reprice, and lock or unlock to close a period.
List, get, create chain wallets, and trigger incremental or custom period syncs.
List token assets and update GL account mappings or spam flags.
Get aggregated token balances or recompute daily snapshots.
List, get, create, and update counterparty contacts for transaction context.
List active issues blocking the close, or refresh the snapshot.
List reports, get a single report, pull computed detail rows, generate token or account reports, run explorer balance reconciliations, and regenerate.
List, get, create, update, and retroactively apply automation rules.
List active background tasks like wallet syncs, report generation, and rule application.
Trigger a net gain/loss run with average, FIFO, LIFO, or HIFO cost basis.
Refresh Xero accounts, categories, and invoices, create a new account, list and book invoice payments, submit gain/loss journals, and sync transactions.
Refresh QuickBooks accounts, classes, and entities, create a new account, and sync transactions.
Refresh Bexio accounts and sync transactions.
# Quickstart
Source: https://learn.breezing.io/quickstart
Set up your workspace, import crypto transactions, categorize activity, and sync your first journal entry to Xero or QuickBooks.
Ready to simplify your crypto accounting workflow? Follow these steps to set up your workspace, import your data, and sync your first journal entry.
Start by creating your company profile. If you are an accounting firm managing multiple clients, you can create a top-level Organization (e.g., your firm) and add individual Companies underneath it.
[Learn how to structure your entities and invite team members →](/getting-started/add-company)
Connect Breezing directly to Xero or QuickBooks Online, and pull in your live Chart of Accounts. Make sure to map your mandatory `Fee` and `Realized Gain/Loss` accounts in your Company Settings.
[Learn how to link your Chart of Accounts →](/getting-started/chart-of-accounts)
Bring your crypto data into Breezing. You can connect public wallet addresses, connect exchange API keys, or upload CSV files. Breezing supports 80+ blockchains and exchanges, and for on-chain wallets it automatically scans all supported networks simultaneously so you don't have to manually select chains.
[Learn how to upload transactions →](/getting-started/upload-transactions)
Name your unknown wallet addresses to build context, categorize your inbound and outbound transactions, calculate your gains and losses, and finally push the finalized journal entries directly to your accounting system.
[Learn how to categorize transactions →](/features/categorizing-transactions)
Once you've mastered the basics, explore the [Advanced Features](/advanced-features/staking) to learn how to handle staking, roll up micro-transactions, and export custom reports!