At the end of the month, the wallet of an agent that buys data shows something few accountants have seen before: hundreds of transfers of a few cents each, to addresses like 0x110c…b784. No invoices, no supplier names, and all of it in USDC, not in euros.
This guide is about turning that into clean books. It is written with German rules in mind, because they are among the strictest. The principles carry over to most of the EU, the details differ. It is general information, not tax advice, so agree your method with your tax adviser before the first month end.
What the chain gives you
For every x402 payment the chain records the paying wallet, the receiving wallet (the seller's payTo), the amount in USDC, the block time and the transaction hash. That is all.
What the agent bought, the seller's name and the price list live somewhere else: in the 402 answer the agent received before it paid. How x402 works shows what such an answer contains.
So the first rule is a practical one. Keep the 402 answer together with the transaction hash, or at least the URL, the description and the price. Without it you can prove that money left, but not what it was for.
Rule 1: every booking needs a document
German bookkeeping rules (the GoBD) allow no booking without a document. For a normal supplier, that document is the invoice. x402 sellers usually send none. You have three options, from strongest to weakest.
Invoice from the seller
- When you have it
- the seller issues one, or lets someone issue it in its name
- What it gives you
- full proof, and input VAT for German sellers
Monthly statement per seller
- When you have it
- you or a service collect all payments to one seller in a month
- What it gives you
- one document per seller and month instead of hundreds
Own document (Eigenbeleg)
- When you have it
- there is no outside document
- What it gives you
- accepted as an exception when it holds all the facts and says why nothing else exists
An own document names the date, the amount, the recipient, what was bought and why there is no outside document. For x402 that last part is easy: the protocol has no invoices. Attach the transaction hashes, and anyone with a block explorer can check every line.
Rule 2: convert each payment to euros at the time of payment
Your books are kept in euros and the payment was made in USDC. Each payment needs a euro value at the moment it happened, and the rate you used has to be on record. Three methods are common.
ECB reference rate for USD, one USDC counted as one dollar
- Strength
- public, simple, easy to check
- Weakness
- exact only while USDC holds its peg, which it has done closely in normal markets
USDC to EUR rate of an exchange at block time
- Strength
- closest to what you could have sold for
- Weakness
- a second source you have to archive
Monthly VAT conversion rate for USD from the German finance ministry
- Strength
- convenient for monthly closing
- Weakness
- it is a dollar rate, not a USDC rate
Pick one, describe it in your process documentation and use it for every payment. Changing methods from month to month is what creates questions in an audit.
Rule 3: two lines per payment
This is where USDC differs from a bank transfer. In most German companies USDC is not booked as cash. It is an asset that you bought at some point, at some rate. Paying with it means part of that asset leaves your books. So one payment produces two things.
- The expense, at the euro value at the time of payment.
- The disposal of USDC, at the value it has in your books, which is what you paid for it. The difference between the two is a small gain or loss from the exchange rate.
If you bought USDC at different times and rates, your accountant decides which purchase each payment uses up, for example first in, first out.
Worked example
This example uses Acme GmbH, an invented company, with invented rates.
On October 1, Acme buys 2,000 USDC for 1,724.00 €, so 0.8620 € per USDC. On October 14 its research agent makes 120 calls to a market data API at 0.25 USDC each, 30 USDC in total. The ECB reference rate that day is 0.8590 € per dollar.
The expense is 30 × 0.8590 = 25.77 €. The 30 USDC were worth 30 × 0.8620 = 25.86 € in the books. The difference of 0.09 € is an exchange rate loss.
1
- Debit
- Data and software services (expense)
- Credit
- USDC (asset)
- Amount
- 25.77 €
2
- Debit
- Exchange rate loss
- Credit
- USDC (asset)
- Amount
- 0.09 €
Over the whole month the agent pays 390 USDC to this seller. At the daily rates that is 335.40 € of expense and 0.78 € of exchange rate loss.
Thousands of lines of half a cent make a ledger unreadable. Many accountants book one pair of lines per seller and day, with the single payments listed in the attached document. Ask yours what they accept.
Rule 4: name the supplier, not the wallet
A wallet address is not a supplier. Under § 160 of the German Fiscal Code (AO), the tax office can refuse an expense if you cannot say who received the money. 0x110c…b784 is not a name.
For every wallet you pay, find out who is behind it and put it on the document: company name, country, and if possible address and VAT ID. Who is behind this wallet? shows how. The seller's country also decides the VAT treatment, which is the next rule.
Rule 5: VAT is usually reverse charge
Most x402 sellers today are based outside Germany, many outside the EU. When a German company buys services from a foreign business, the service counts as supplied in Germany, and the buyer reports the VAT and deducts it again in the same return. The cases, the documents and the boxes in the return are in VAT on x402 payments.
Rule 6: no gas line, and keep everything for eight years
Two details that save questions later.
Gas. With x402 the facilitator submits the transaction and pays the network fee. Your agent's wallet only sends USDC, so there is no gas to book.
Retention. Booking documents are kept for eight years in Germany. Store the documents together with the transaction hashes and your rate source. The chain stays readable, but the 402 answers and the rate pages you used may not.
A month end checklist
Seller name, country, address
- Where it comes from
- the seller's website and company register, or a wallet register
What was bought
- Where it comes from
- the 402 answers or the seller's catalogue
Number of payments and USDC total
- Where it comes from
- the chain, filtered by your wallets and the seller's payTo
Euro value per payment and the rate used
- Where it comes from
- ECB reference rate or the source you chose
Book value of the USDC spent
- Where it comes from
- your USDC purchases
VAT case
- Where it comes from
- the seller's country and status
Transaction hashes
- Where it comes from
- the chain
Where 402lounge comes in
You can do all of this by hand with the checklist above. 402lounge does it from your wallets: a receipt for every payment, and once a month one document per seller with the euro values at the ECB rate and every transaction hash in the appendix.
Receipts for every x402 payment
402lounge reads your wallets on Base and writes a receipt for every payment, plus one document per seller and month with euro values and transaction hashes.