How to Read a Crypto Execution Report: Fees and Fills
A trade confirmation usually shows one price and one quantity. The order that produced it may have touched several prices, paid commission in a different asset, and filled only part of the requested size. Reading the execution report correctly means separating the order you placed from the fills that actually happened.

Cover artwork: CoinSoso · AI-generated, not a photograph of a real venue, product or market capture.
Key takeaways
- The order price is the limit you set; the average fill price is total quote spent divided by total base executed.
- Binance's spot API reports executedQty, cummulativeQuoteQty and a fills array; the average price is the quotient of the first two, not a field the exchange sends.
- A commission charged in the base asset reduces the amount you receive, so the effective cost per unit is higher than the average fill price.
- PARTIALLY_FILLED means part of the order executed and the remainder is still working or can be cancelled.
- A receipt that reconciles quantity, quote amount and fees to the last decimal is the only reliable basis for cost accounting.
The receipt is not the order ticket
An order ticket describes an intention: buy 1 BTC, limit 60,000, good until cancelled. An execution report describes what happened: which quantities traded, at which prices, against which counterparties, and what commission was charged.
The two are easy to conflate because the confirmation screen often shows the limit price in large type. But once an order has traded, the limit price is history. The numbers that matter for cost and accounting are the executed quantity, the cumulative quote amount, and the fee.
The five fields that explain a trade
Using Binance’s spot API as the reference, an order response contains, at minimum:
| Field | What it holds | Why it matters |
|---|---|---|
origQty |
The quantity requested | The denominator for fill progress |
executedQty |
The quantity actually traded | What you own or sold |
cummulativeQuoteQty |
Total quote asset executed | The numerator for average price |
status |
NEW, PARTIALLY_FILLED, FILLED, CANCELED, EXPIRED |
Whether anything is still working |
fills |
Per-fill price, quantity, commission and tradeId (FULL response) |
The audit trail |
The average fill price is not a separate field. It is cummulativeQuoteQty / executedQty, in quote currency per unit of base. If the order bought 0.5 BTC for 29,998 USDT, the average is 59,996 USDT per BTC.
Binance’s documentation shows a FULL response with five fills of 1, 5, 2, 1 and 1 units, summing to an executedQty of 10. That is the important structural point: one order, many fills, one aggregate row.
A worked example, including the fee
Suppose a limit buy for 0.5 BTC at 60,000 USDT fills in two parts:
- 0.2 BTC at 59,990 USDT
- 0.3 BTC at 60,000 USDT
The quote spent is (0.2 × 59,990) + (0.3 × 60,000) = 11,998 + 18,000 = 29,998 USDT. The average fill price is 29,998 / 0.5 = 59,996 USDT.
Now the commission. If the venue charges 0.1% in BTC, the fee is 0.0005 BTC, and the net quantity received is 0.4995 BTC. The effective cost per BTC received is 29,998 / 0.4995 = 60,056.06 USDT. The 0.1% fee shows up as roughly a 0.1% higher cost per unit, not as a separate line on the price.
If the same fee is charged in USDT instead, the quantity received stays 0.5 BTC and the cost is 29,998 + 29.998 = 30,027.998 USDT, or 60,055.996 per BTC. The two conventions produce almost the same effective cost, but they change which balance moves. That difference matters when reconciling a wallet, not when judging the trade.
Partial fills and the remainder
A PARTIALLY_FILLED status means the order has traded some quantity and the rest is still working. On a limit order this is normal: the order rests on the book and fills as counterparties cross it. The report shows the executed part and leaves the remainder open.
Two details are easy to miss:
- The remainder can be cancelled. Cancelling stops the unfilled quantity; it does not reverse the fills that already happened.
- The average price can move after you look. Each new fill changes
executedQtyandcummulativeQuoteQty. A report captured mid-fill is a snapshot, not a final receipt.
For a market order, partial fills are usually a matter of seconds, but they still happen when the order is larger than the best level. The order walks the book, consuming several prices. The spread and slippage guide explains why that walk costs more than the top-of-book quote.
Commission in a third asset
Many venues let the fee be paid in a platform token, a discount balance, or the quote asset. The report records the asset, not just the amount. Three consequences follow:
- The fee currency changes the balance you reconcile. A BTC fee leaves less BTC; a USDT fee leaves less USDT.
- A discount token is a position. Paying in BNB or OKX’s token consumes a balance that has its own price risk.
- Fee tiers are not the same as the rate on this fill. The rate applied depends on the pair, the tier and whether the order was maker or taker. The maker and taker guide covers the distinction; the execution report shows which rate was actually charged.
How to reconcile a report
A four-line reconciliation catches most errors:
- Sum the fill quantities. The total must equal
executedQty. - Sum price × quantity across fills. The total must equal
cummulativeQuoteQty, allowing for the venue’s rounding. - Convert each commission to quote currency and add it. The result is the all-in cost or proceeds.
- Compare the all-in figure with the balance change in the wallet or account statement.
If the three totals do not agree, the report is incomplete or the query returned a different order. That is a data problem, not a trading loss. Binance’s order query endpoints allow a specific order to be fetched by orderId or clientOrderId, and a FULL response returns the fills array needed for the check.
What the report does not tell you
An execution report is a record of fills, not a statement of profit. It does not include the market price at the time you decided to trade, the opportunity cost of a partial fill, or the tax treatment of the disposal. It also does not tell you whether the price was good relative to the market: a fill at your limit can be excellent or poor depending on what happened next.
What it does give you is a closed arithmetic loop. Quantity, quote amount, commission and status either reconcile or they do not. Building cost accounting on that loop is more reliable than building it on the price shown on the order ticket.
Sources
How this was researched. Written from primary documentation and the exchange or protocol's own published material, with sources listed at the end of the article.
Primary sources for the factual claims on this page. A date appears only where a human has actually read the source; where it is missing, the check is still outstanding.
- Binance Spot API — New order and order response fields(read 2026-10-20)
- Binance Spot API — Order status and fills(read 2026-10-20)
- OKX API v5 — Order details(read 2026-10-20)
Frequently asked questions
Why is my average fill price different from the price I entered?
Because a marketable order can consume more than one resting order. Each fill has its own price, and the average is the total quote amount divided by the total base quantity. A limit buy at 60,000 can fill partly at 59,990 and partly at 60,000, producing an average slightly below the limit. The limit is a ceiling, not a promise of that exact price.
What is the difference between executedQty and origQty?
origQty is the size you requested. executedQty is the size that has actually traded. On a filled order they are equal; on a partially filled order executedQty is smaller, and the difference is the quantity still resting or cancelled.
Why is cummulativeQuoteQty spelled with two m's?
Because that is the field name in Binance's API. It means the cumulative amount of quote asset spent or received across all fills. The spelling is part of the contract, and code that reads a correctly spelled field instead will find nothing.
My fee was charged in BNB. How do I calculate the true cost?
Convert the BNB fee to quote currency at the price used for the deduction, then add it to the quote amount spent. The exchange reports the commission and the commission asset for each fill. If the fee is charged in the base asset, subtract it from the quantity received and divide the quote spent by the net quantity.
Does a partial fill mean the order failed?
No. It means part of the order executed. A limit order can rest for hours and fill in pieces as counterparties arrive. The remainder stays on the book until it fills, expires, or is cancelled. Only a zero executed quantity with a cancelled status means nothing traded.
Where to go next
Independent research. Each card shows the platform’s invite code, and its Create Account button is a referral link that may earn us a commission at no extra cost to you. Whether an account can be opened is decided by the platform at sign-up.
Binance

One of the largest global exchanges by traded volume, with a very broad product range.
20% Trading Fee Rebate
Use invite code con888 when signing up to enjoy trading fee benefits.
Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.
Do not install an APK from an unknown source, or one that has been modified or cannot be checked.
OKX

A large global exchange offering spot, derivatives and a self-custody wallet.
20% Trading Fee Rebate
Enter invite code con888 when signing up to check available trading fee benefits.
Download from the exchange's official download service. Verify the source and follow the on-screen installation instructions.
Do not install an APK from an unknown source, or one that has been modified or cannot be checked.