Coinbase Advanced Order Types: Market, Limit, Stop-Limit
Coinbase Advanced does not take an order type and a time in force as two separate choices. Each combination is a single configuration key, and the key determines both what the order does and how long it lives. That design is precise, but it is also where most order-entry mistakes happen: the wrong key, the missing direction field, or a stop that arms correctly and then fails to fill.

Cover artwork: CoinSoso · AI-generated, not a photograph of a real venue, product or market capture.
Key takeaways
- Coinbase Advanced encodes type and time in force in one `order_configuration` key: `limit_limit_gtc`, not `limit_gtc`, and `stop_limit_stop_limit_gtc` for a stop-limit.
- Market orders use `market_market_ioc`; the fill-or-kill variant `market_market_fok` is documented for perpetuals only.
- A stop-limit carries two prices. `stop_price` arms the order when the last trade price reaches it, and `limit_price` bounds the execution price after it triggers.
- `stop_direction` is mandatory: STOP_UP for a trigger above the market, STOP_DOWN for a trigger below it. A missing or inverted direction is a rejected order, not a late fill.
- A triggered stop-limit is a resting limit order, not a market order. If the price gaps through the limit, the order can remain unfilled, which is the risk the stop price alone does not remove.
One key, one order
Coinbase Advanced’s create-order request carries an order_configuration object, and exactly one key inside it defines the order. The key names both the order type and the time in force. There is no separate time_in_force field on the order itself.
That is a deliberate design: it makes invalid combinations unrepresentable. You cannot submit a limit order with a missing time in force, because the time in force is part of the key. The cost is that the key names are literal and easy to mistype, and a wrong name is rejected at the API boundary rather than corrected.
The published configuration keys include:
| Intent | Key | Notes |
|---|---|---|
| Market order, immediate-or-cancel | market_market_ioc |
Remainder cancelled |
| Market order, fill-or-kill | market_market_fok |
Documented for perpetuals only |
| Limit order, good till cancelled | limit_limit_gtc |
Rests until cancelled |
| Limit order, good till date | limit_limit_gtd |
Requires an end time |
| Limit order, fill-or-kill | limit_limit_fok |
Must fill completely and immediately |
| Smart-order-router limit, IOC | sor_limit_ioc |
Routed limit, remainder cancelled |
| Stop-limit, good till cancelled | stop_limit_stop_limit_gtc |
Two prices plus direction |
| Stop-limit, good till date | stop_limit_stop_limit_gtd |
Adds an end time |
| Bracket, good till cancelled | trigger_bracket_gtc |
Entry with attached take-profit and stop |
| TWAP limit, good till date | twap_limit_gtd |
Scheduled execution |
| Scaled limit, good till cancelled | scaled_limit_gtc |
Multiple price levels |
The time-in-force values themselves are GOOD_UNTIL_CANCELLED, GOOD_UNTIL_DATE_TIME, IMMEDIATE_OR_CANCEL and FILL_OR_KILL. The guide’s wording is useful for separating the last two: an IOC order cancels the remaining size instead of leaving it on the book, while a FOK order is only posted if it would be immediately and completely filled.
Market orders: two variants, one restriction
A market order takes liquidity at whatever price the book offers. market_market_ioc is the standard form: it fills what it can immediately and cancels the rest. market_market_fok requires the entire size to fill at once or the order does not execute.
The guide notes that the fill-or-kill market variant is for perpetuals only. On spot, the practical choice is between a market IOC and a limit order with a price you are willing to pay. That matters because a market order has no price protection: in a thin book, the average fill can be far from the last trade.
On 2026-10-19 at 01:29:31 UTC the Coinbase BTC-USD book showed a bid of 82,377.74 and an ask of 82,377.75 — a one-cent spread, which is about as tight as a book gets. The same market order in a quiet book and in a gap are not the same instruction, even though the configuration key is identical.
Limit orders: the price is a bound, not a target
A limit order specifies the worst price at which it may execute. Coinbase’s schema defines limit_price as the price, or better, at which the order should be executed: a buy executes at or below the limit, and a sell at or above it.
limit_limit_gtc rests on the book until cancelled. limit_limit_gtd rests until a specified date and time. limit_limit_fok must fill completely and immediately, which makes it a taker order despite being a limit. sor_limit_ioc routes through the smart order router and cancels the remainder.
The less obvious field is post-only. Coinbase’s definition is direct: when enabled, only maker orders are posted to the book, and orders that would post as a taker are rejected. That makes post-only a guarantee about the fee tier, not about the fill. A post-only order that would cross is not repriced; it is rejected. The Coinbase Advanced fee guide covers why that distinction changes the cost of a round trip.
Stop-limit: two prices and a direction
A stop-limit order carries three price-related fields:
stop_price— the trigger. The order is armed when the last trade price reaches it.limit_price— the bound on execution after the trigger.stop_direction—STOP_DIRECTION_STOP_UPorSTOP_DIRECTION_STOP_DOWN, telling the venue whether the trigger is above or below the market.
The direction field is not optional and is not inferred from the side. A sell stop below the market uses DOWN; a buy stop above the market uses UP. The same sell side can be used with an UP trigger for a breakout entry, which is why the venue asks rather than guesses.
Coinbase’s documentation states that stop orders are triggered by the last trade price. That is a different rule from a futures venue that triggers on mark price. In a fast move the last trade can cross the stop and then trade well beyond the limit before the order reaches the book.
A worked example using the live book:
- BTC-USD last trade: 82,363.41.
- A sell stop-limit with
stop_price82,000 andlimit_price81,500, direction DOWN. - The order rests unarmed while the last trade is above 82,000.
- When the last trade prints at or below 82,000, the order is placed as a sell limit at 81,500.
- If buyers are still bidding above 81,500, it fills at the best available price at or above the limit. If the market gaps below 81,500 and does not trade back up, it does not fill.
The last line is the part a stop-limit does not solve. The limit protects the price; it does not guarantee an exit. A plain stop order, where the venue supports one, converts to a market order at the trigger and accepts the fill risk instead.
Bracket orders: two exits attached to one entry
A bracket order uses trigger_bracket_gtc or trigger_bracket_gtd. It attaches a take-profit and a stop to an entry, and Coinbase’s documentation describes the mechanism: as soon as a fill occurs at one of the specified price levels, the other side is automatically disabled.
The same documentation is explicit about the limit of the protection: execution of downside protection is not guaranteed during high market volatility. A bracket is a pair of conditional orders, not an insurance contract. If the stop is a stop-limit and the market gaps through its limit, the bracket’s protection can fail in the same way a standalone stop-limit can.
The bracket’s stop leg uses a limit price 5% higher for buys and 5% lower for sells, according to the guide. That is a wide bound designed to improve the chance of a fill in a fast market, at the cost of accepting a worse price.
Where order-entry mistakes actually happen
- The key name.
limit_limit_gtc, notlimit_gtc. The type is repeated. - The missing direction.
stop_directionis required on a stop-limit, and an inverted value arms the order on the wrong side of the market. - The wrong trigger. Coinbase stops follow the last trade price. A trader watching the mark or an index is watching a different series.
- The limit treated as a stop. After the trigger, the order is a limit. It can rest unfilled.
- Post-only on the wrong type. Post-only lives on the limit configuration and rejects taker-side orders; it is not in the stop-limit schema.
- The filled side of a bracket. One fill disables the other side. A partial fill at the entry does not necessarily mean the exits are sized to the filled quantity, so the position and the protection have to be reconciled after execution.
The mechanics of rejection are covered in why an exchange rejects your order, which is the right place to start when a configuration is refused rather than filled. The cost side of the same decision — maker versus taker, and the difference between Simple and Advanced — is set out in Coinbase Simple vs Advanced trading cost. The trading fee calculator turns the resulting rates into a round-trip cost.
Risk note. Order schemas and field definitions in this article were read from Coinbase Developer Platform documentation on 2026-10-19, and the live BTC-USD quote at 01:29:31 UTC from Coinbase’s public Exchange API. Order behaviour in fast markets can differ from the documented path, and a stop-limit can fail to fill. Nothing here is investment advice or a recommendation to trade.
The configuration is the strategy
Coinbase Advanced’s order model rewards precision. A market order is one key; a limit order is one key; a stop-limit is one key plus two prices and a direction. Once those are right, the venue does exactly what was asked, including leaving a triggered stop-limit unfilled when the market gaps through its limit.
The way to read the table is not “which order type is best” but “what do I want to happen at each price”. A market order answers “fill now at any price”. A limit answers “fill at this price or better, or not at all”. A stop-limit answers “arm at this price, then behave like a limit”. The key names are just the encoding of that sentence.
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.
- Coinbase Developer Platform — Advanced Trade API orders guide (order configuration keys, time in force, stop fields)(read 2026-10-19)
- Coinbase Developer Platform — Advanced Trade OpenAPI specification (enums and schemas)(read 2026-10-19)
- Coinbase Developer Platform — Create order reference(read 2026-10-19)
- Coinbase Exchange API — BTC-USD ticker (live bid, ask, last)(read 2026-10-19)
- Coinbase Exchange API — BTC-USD stats (open, high, low, last)(read 2026-10-19)
Frequently asked questions
What is the correct configuration key for a limit order?
For a good-till-cancelled limit order it is `limit_limit_gtc`, with the type repeated in the key. Third-party write-ups often print `limit_gtc`, which is not the schema's name. The full set in the published specification includes `limit_limit_gtc`, `limit_limit_gtd`, `limit_limit_fok` and `sor_limit_ioc`, each nesting the size and price inside a key that already names the type and time in force.
Does a stop-limit order become a market order when triggered?
No. The stop price arms the order; after it triggers, the order is placed as a limit order at the specified limit price. If the market moves through that limit without trading at it, the order can remain open or unfilled. That is the difference between a stop-limit and a stop: the limit caps the price but does not guarantee an exit.
Why was my stop order rejected for a missing stop_direction?
Because the field is required and tells the venue which side of the market the trigger is on. `STOP_DIRECTION_STOP_UP` means the order triggers when the last trade price goes above the stop price; `STOP_DIRECTION_STOP_DOWN` means it triggers when the last trade price goes below it. A sell stop below the market uses DOWN; a buy stop above the market uses UP. The venue cannot infer it safely from the side alone, because both sides can be used for either direction.
What price triggers a Coinbase stop order?
The last trade price. Coinbase's documentation says stop orders are triggered based on the movement of the last trade price, not the mark price or an index. That matters in a fast market, where the last trade can move through the stop before the order is placed, and it is a different trigger rule from a futures venue that uses mark price.
Can I use post-only on a stop-limit order?
The published stop-limit schemas do not include a post-only field; post-only appears on the limit configuration. A stop-limit is therefore not a maker-only order in the documented schema. If maker status matters, the order has to be a limit order with post-only enabled, which will be rejected if it would cross the book as a taker.
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.