My order was rejected
You placed an order and it was rejected, cancelled, or filled differently than you expected.
Orders on dreamDEX are matched on-chain, so a rejection is the market's rules rather than a decision about your account. These are the common causes, in the order they come up.
The order was below the minimum size
Every market has a minQuantity, the smallest order it will accept. Anything below it is rejected automatically.
This is the most common reason a first order does not go through. Try again with a larger size.
The size or price was not a valid increment
Each market has a lotSize, the increment order sizes must be a multiple of, and a tickSize, the same for price. If your size or price is not a whole multiple of those, the order is rejected.
Round your size and price to the market's increments.
It was a Post-Only order that would have filled immediately
This is working as intended. A Post-Only order (the limit ticket's ALO, Add liquidity only, time in force) is designed to be rejected if it would fill straight away. The point of it is to guarantee you are providing liquidity rather than taking it, so if your price would have matched something already resting on the book, the transaction reverts and no order is placed at all. So there is no order to look for afterwards: it was refused rather than created and then cancelled.
If you want it to fill immediately, change Time in force on the limit ticket from ALO to GTC or IOC, or use a market order. Leaving ALO selected and placing again reproduces the same rejection.
A market order only partly filled
Market orders are Immediate-or-Cancel. They fill whatever is available at that moment and cancel the rest rather than resting on the book. If there was not enough liquidity for your full size, you get a partial fill and the remainder is cancelled.
- Happy to wait? Use a limit order, which rests until it fills
- Need the full size or nothing? Fill-or-Kill does that, where it is offered
It filled at a worse price than quoted
A market order in the app is sent with a price limit set by your slippage tolerance (0.5% by default, adjustable in the ticket). It fills down to that limit and no further: anything the book cannot fill within tolerance is cancelled, not filled at a worse price. So your average can be a little worse than the top of the book, but never beyond your tolerance. If the book cannot fill your size at all within it, the ticket refuses up front with "No liquidity within X%".
Use a limit order to set the worst price you are willing to accept. It may not fill immediately, but it will not fill worse than your limit.
It would have matched your own resting order
If an incoming order would have matched one of your own resting orders, self-trade prevention refuses the whole incoming order: the transaction fails, none of the new order is placed or filled, and your resting order stays on the book. The app always uses this setting; it cannot be changed in the ticket. The app shows the generic "Order could not be completed" message for it.
If you have orders on both sides of the book close together, that is normally the cause.
Someone else filled ahead of me
Matching is price-time priority. Best price fills first, and where two orders share a price, whoever placed theirs earlier fills first. So the other order was either at a better price or earlier in the queue at the same price.
All matching happens on-chain, so the ordering is verifiable rather than discretionary.
If you saw an error name
A rejection is a failed transaction with a named reason. The app does not show you the raw name — it shows one of these messages instead:
| The app said | What happened |
|---|---|
| "Couldn't fill: nothing could be taken at your limit price…" | A market or IOC order found nothing to fill at all |
| "Not placed: fill-or-kill is all or nothing…" | A Fill-or-Kill order could not be filled in full |
| "Not placed: add-liquidity-only orders never take…" | A Post-Only order would have filled immediately |
Saw "Order could not be completed — please try again" instead? That is every other rejection, including an order that would have matched your own resting order. The toast does not show the specific reason and carries no link, so find the failed transaction yourself: copy your DreamDEX trading account address from the wallet panel, open it on the block explorer, and the failed transaction is the most recent one. Send us that in a ticket — or, failing that, the pair and the time you placed the order — and we will tell you which rule it hit.
A partially filled market order is not a rejection. It fills what it can, cancels the rest, and succeeds.
Still stuck
Open a ticket with the pair you are trading, the size and price you tried, the error name if you saw one, and a screenshot. That is usually enough to tell you exactly which rule it hit.