How to send a crypto invoice a client can pay in USDC
Key takeaways
- A crypto invoice is a normal invoice plus three extras: the coin, the network and an expiry. Without the network, clients send money to the wrong chain.
- Put your own invoice number in the order reference. Then you can look up any payment by the number your client already knows.
- A client who pays from an exchange often arrives a little short, because the withdrawal fee comes out of the amount.
- On a $1,850 project the client pays 1,850 USDC and you receive $1,840.75 after the 0.5% fee, plus a few cents of gas.
Why a freelancer cannot just paste a wallet address into a PDF
Plenty of people start this way. They add a line to a PDF that says "pay to 0x...", and they hope. Then a client asks which network, whether USDC or USDT is fine, and what to write in the memo. Nobody can answer, because a plain wallet address carries no invoice at all.
The reverse problem hits the sender too. One wallet receives five transfers in a week, none of them labelled. Which one settled the logo job, and which one was the retainer? You end up reading a block explorer and matching amounts by eye.
This guide covers the sending side: what a crypto invoice contains, how to issue one that matches a single payment, and what to do when the client pays too little, too late or on the wrong chain. Payzum is a non-custodial, stablecoin-first crypto payment processor: payments settle directly to wallets the merchant controls. If your problem is the month-end books rather than the invoice itself, read our guide on how to reconcile stablecoin payments with invoices.
The fields on a crypto invoice, and why each one is there
Start from the paper invoice you already send. The European Commission's VAT invoicing page (checked 2026-11-06) lists what a full invoice must carry. That includes the date of issue, a unique sequential number, the supplier's and customer's names and addresses, a description and quantity of the goods or services, the unit price, and the VAT rate and amount. Your national rules may differ, so check them.
A crypto invoice keeps every one of those lines. It adds the fields a payment needs to land in the right place.
| Field | Why it is on the invoice | Example |
|---|---|---|
| Invoice number | Unique and sequential, so you and your client can name the same document | 2026-031 |
| Amount and unit | One number the client can copy, in a stablecoin that tracks the dollar | 1,850.00 USDC |
| Network | The same token exists on many chains; only one of them reaches you | Base |
| Expiry | Stops an unpaid invoice from staying open forever | Valid until Nov 13 |
| Payment reference | Ties the payment to your number, not just to an address | order reference 2026-031 |
| Tax and party details | Your usual legal lines; a payment link does not replace them | Names, addresses, VAT number if you have one |
A payment request and a tax document do different jobs. Payzum gives you the request and the record of what was paid. Your tax invoice stays your own document, and Payzum does not give tax advice. The two meet on the invoice number.
Pick the network before you pick the amount
"I'll pay in USDC" is not a complete answer. Circle's multi-chain USDC page lists 38 blockchains with native USDC (as of June 2026). Tether's supported protocols page shows USDT on 14 networks, with a few older ones closed to new issuance (checked 2026-11-06). Each chain is its own ledger. A token sent on one does not appear on another.
Payzum accepts payments on Bitcoin, Ethereum, Solana, Polygon, Base, Arbitrum, Optimism, BNB Chain and Avalanche. For an invoice, narrow that to one or two chains your client can use. A designer in Lisbon billing a startup that holds USDC on Base should write Base on the invoice, and nothing else.
Cost and speed should guide the choice. Base and Polygon confirm in about two seconds and cost cents in gas. Our notes on USDC transfer speed by network and the cheapest network for USDT payments compare them in detail.
One invoice, start to finish: a $1,850 brand identity project
Here is a single invoice followed from creation to settlement. The numbers are illustrative, but the mechanics are the ones Payzum documents.
| Date | What happens | Status you see |
|---|---|---|
| Nov 6 | You issue invoice 2026-031 for $1,850 in USDC on Base. The order reference is 2026-031 and the expiry is Nov 13. You email the payment link. | waiting |
| Nov 9 | The client opens the link, sees the exact amount, network and address, and withdraws 1,850 USDC from an exchange. | waiting |
| Nov 9 | The exchange takes a 1.50 USDC withdrawal fee out of the amount, so 1,848.50 USDC arrives. The invoice is short by 1.50. | partially_paid |
| Nov 9 | The client sees the shortfall on the checkout page and sends 1.50 USDC more. | finished |
| Nov 9 | Total received is 1,850 USDC. Payzum keeps 0.5%, which is $9.25, and you receive $1,840.75 plus a few cents of network gas. | finished |
The 1.50 USDC fee is an example. Real exchange fees depend on the exchange and the network. The shape is the point: a small shortfall, a visible status and a top-up on the same invoice.
The invoice stays open for top-ups while it is partially paid. According to Payzum's invoice lifecycle reference, no notification is sent for a partial payment today, so you find it in the dashboard or by polling the API. Do not release the work on a partial.
Five steps to send the invoice
- Settle your own side first. Create a wallet you control, sign up at merchant.payzum.com, complete identity verification and add the wallet as the settlement address.
- Create the invoice with the amount, the coin and the network. Use your own number as the order reference. In the API this is the
order_idfield, and you can read the payment back by that number later. - Set the expiry to match your payment terms. Seven days is a reasonable default for project work; an advance can be shorter.
- Send the hosted link by email or chat, next to your normal PDF. The PDF carries your tax lines; the link carries the payment.
- Wait for
finished. Then release the files or book the next milestone. If you automate this, trigger it from a signed webhook and not from the client's word. See how signed webhooks for crypto payments work.
What your client sees, and what you see
The client opens a hosted checkout page. It shows the exact amount to send, the coin, the network and a deposit address. They copy these into their wallet or exchange. They do not need a Payzum account.
On your side, each invoice returns the Payzum ID, your order reference, the price you quoted, the exact amount the client must send, and the amount received so far. The reading invoices guide lists the fields. To find a payment you can search by either ID. Note that the response does not include the transaction hash. If a client wants to prove they paid, ask for the hash and look it up on the chain's block explorer. Etherscan, for one, documents a receipt status endpoint for Ethereum transactions.
When the invoice goes wrong: expired, short, over or on the wrong chain
Most problems fall into one of four cases.
| Situation | What the status shows | What you do |
|---|---|---|
| Client pays after the expiry | expired | Issue a fresh invoice. If funds did arrive, return them as a new payment. |
| Client pays too little | partially_paid | Ask for the difference on the same invoice. Hold the work. |
| Client pays too much | finished, with the amount received above the amount due | Compare the two amounts. Refund the excess as a new payment. |
| Client sends on a different network | No match on the invoice | Do not guess. Ask for the hash and check the chain before promising anything. |
On overpayment, the invoice lifecycle reference says the buyer-facing page can show overpaid, while the merchant API reports finished. Detect it by comparing actually_paid with pay_amount. Payzum's default tolerance is 5%, so a slight excess is accepted as paid.
Nobody can pull an on-chain payment back, so a refund is a new transfer you send. Return the same stablecoin to an address the client confirms in writing, not to the address the money came from. That address is often an exchange deposit wallet that you cannot reach.
Crypto invoice versus a bank-transfer invoice
| Point | Invoice paid by bank transfer | Invoice paid with Payzum |
|---|---|---|
| Matching a payment to the invoice | Client writes a reference, or you guess from the amount | Order reference set by you; look up by your number |
| Time to know it is paid | Often 1 to 3 days, longer across borders | Seconds after the network confirms |
| Where the money lands | Your bank, after intermediaries take fees | Your own wallet, minus Payzum's 0.5% |
| Short payments | Found when you check the statement | partially_paid status, with a top-up on the same invoice |
| Reversal after payment | Possible by the sending bank in some cases | None; a refund is a new transfer you send |
Three people who send invoices this way
- A freelance developer bills three overseas clients a month. One link per invoice replaces three emails asking for bank details. The longer guide on accepting USDC as a freelancer covers the rest of the workflow.
- A small agency invoices a retainer on the first of each month. The same client, the same network and a new number every time keep the ledger clean.
- A parts supplier asks a distributor for 50% upfront and 50% on delivery. Two invoices with the same job in the order reference tell you which half arrived.
Doubts clients and freelancers raise
My client has never used crypto. Will they manage?
If they hold USDC on an exchange, they can pay. The checkout page tells them the amount, network and address. Send them the link and one sentence: "choose Base when you withdraw". If they do not hold crypto, offer a bank transfer instead.
Is this invoice also my tax invoice?
Treat it as the payment request. Keep issuing your tax invoice the way your jurisdiction requires and quote the same number on both. Payzum's accounting exports value each sale on the day it happened, but they are records and not tax advice.
Frequently asked questions
How do I send an invoice that a client can pay in USDC?
Create the invoice with the amount, the coin and the network, set an expiry, and use your own invoice number as the order reference. Then send the hosted payment link by email or chat. The client pays from any wallet or exchange, and the funds settle in your own wallet.
Does the client need a Payzum account to pay?
No. The client opens the hosted checkout page, copies the exact amount, network and address into their wallet or exchange, and sends the payment. Only the person who gets paid needs an account.
What happens if the client pays too little?
The invoice moves to partially_paid and stays open for a top-up. No notification is sent for a partial payment today, so check the dashboard or poll the API. Hold the work until the status is finished.
What happens if the invoice expires before the client pays?
It moves to expired. Issue a fresh invoice. If funds still arrived on the old one, return them as a new payment to an address the client confirms.
Can I refund a crypto invoice?
A payment on-chain cannot be pulled back, so a refund is a new transfer from you. Send the same stablecoin to an address the client confirms in writing, not to the address the payment came from.
Is a Payzum invoice also a tax invoice?
Treat it as the payment request. Keep issuing your tax invoice as your jurisdiction requires and quote the same number on both. Payzum provides accounting records and not tax advice.
Book 20 minutes and we will set up your first invoice
Every freelancer and small agency bills a little differently. Bring one real invoice, and we will configure the coin, the network, the expiry and the order reference with you. The funds settle in a wallet that only you control. Payzum charges 0.5% per processed sale, taken out of the amount received, plus network gas.
Calendar not loading? Book directly here · [email protected]
This is not legal, tax or financial advice. Invoice requirements and network lists were checked on 2026-11-06 and change over time. Confirm the rules for your jurisdiction.