Skip to main content

Exchange Changelog

These release notes list changes to Coinbase Exchange.




Added support for Take Profit Stop Loss orders in FIX 5.0 and FIX 4.2.


Added new Loan Interest endpoints:


Added the following response properties to Get product stats:

  • rfq_volume_24hour
  • conversions_volume_24hour
  • rfq_volume_30day
  • conversions_volume_30day
// Example
"apiProductStats": {
"type": "object",
"example": {
"open": "5414.18000000",
"high": "6441.37000000",
"low": "5261.69000000",
"volume": "53687.76764233",
"last": "6250.02000000",
"volume_30day": "786763.72930864",
"rfq_volume_24hour": "78.23",
"conversions_volume_24hour": "0.000000",
"rfq_volume_30day": "0.000000",
"conversions_volume_30day": "0.000000"


  • Added FIX 5.0 support for Iceberg Orders (in addition to FIX 4.2).
  • Moved documentation for Iceberg Orders to a dedicated page.


Added support for OrderMassCancelRequest (by Trading Session only):

  • OrderMassCancelRequest (35=q): Sent by customer to Coinbase to request mass cancellation of all orders on a FIX session previously submitted by customer.

  • OrderMassCancelReport (35=r): Sent by Coinbase to the customer as an acknowledgement of an Order Mass Cancel Request for processing or a rejection of the request.


  • Added fee_amount to existing endpoint, /conversions response.

  • Added new endpoint, /conversions/fees/ to help monitor current L30d net conversion volume and calculate expected fees.


Added the display_name to:

  • The top level of the Account and Currency response objects (but did not remove from the lower level details object as originally planned).
  • The WebSocket Status Channel currencies object.
"id": "BTC",
"name": "Bitcoin",

"type": "crypto",
"symbol": null,
"display_name": null
"default_network": "bitcoin",

"display_name": "BTC" // UI only


Added account_ids to the WebSocket subscriptions message, in support of the Balance Channel. Users not subscribing to this channel can ignore this field.

"type": "subscriptions",
"channels": [
"name": "balance",
"product_ids": null,
"account_ids": [


Added a new WebSocket Balance Channel to track account balance updates. It is recommended for accounts with frequent balance changes. Authentication is required.


The Balance Channel subscribe message includes the new field, account_ids.

// Balance Channel subscribe message
"type": "subscribe",
"channels": [
"name": "balance",
"account_ids": [

FIX 4.2 Execution Report

Updated the FIX 4.2 Execution Report as follows:

  • LeavesQty and CumQty are now additionally populated in the Execution Report when OrdStatus is New or Replaced. In sum, they populate it when:

    • 39=0 ⇒ OrdStatus = New
    • 39=1 ⇒ OrdStatus = Partially filled
    • 39=3 ⇒ OrdStatus = Done for day
    • 39=5 ⇒ OrdStatus = Replaced
  • AvgPx only popluates Execution Report if CumQty > 0.

  • OrderQty now represents the original order quantity when OrdStatus is Canceled or Done for day.


Added Travel Rule support:

  • Added support for providing Travel Rule data when withdrawing to a crypto address.
  • Added support for Coinbase to act as intermediary VASP for crypto withdrawals.
  • Withdraw to crypto address accepts new optional parameters as part of its POST request:
    • travel_rule_data: Data necessary to satisfy Travel Rule data requirements.
    • is_intermediary: Flag to create transfer with Coinbase as intermediary VASP.
      • If true, intermediary_jurisdiction must be provided.
      • Parameter travel_rule_data may be necessary if the jurisdiction requires data.
    • intermediary_jurisdiction: Jurisdiction (ISO 3166-1 alpha-2) for Travel Rule data validation.


Added RFQ support to FIX 5.0 Order Entry.


Released ResendRequest (35=2) and SequenceReset-GapFill to production for FIX 5.0 Order Entry.


Added Iceberg Orders to FIX 5.0 production:

See Iceberg Orders in 4.2 for conceptual details.


Added Loan APIs for underwritten users to view and monitor loan/collateral metrics, initiate loan opens and initiate loan repayments.


See Coinbase Exchange Loans Program for info on program structure, process, and eligibility.


Added Iceberg Orders to FIX 4.2 production and the REST API.


In FIX 4.2, disabled DropCopyFlag by default by setting 9406=N (from Y). See Logon (A).

To ensure a session continues to receive Drop Copy reports, explicitly enable DropCopyFlag by setting 9406=Y. See Drop Copy Session in Best Practices for more.


Previsouly, DropCopyFlag was enabled by default in FIX 4.2. (It was always disabled in FIX 5.0).


Added destination_tag_regex field to the supported_networks of the currencies object in Status message


FIX Order Entry on the FIX 5.0 SP2 protocol was released to production.


Added Iceberg orders to the FIX 4.2 Sandbox. See Upcoming Changes for details.


Added the following RFQ feature to production:

  • RFQ Request (AH) enables users to submit subscription requests based on specific assets, ensuring that only these particular requests are forwarded. For example, if subscribing to "ETH-USD" with both products present, a quote request message and quote status report for both "ETH-USD" and "USD-ETH" are returned as responses.


Added Travel Rule APIs for users to provide and manage their travel rule deposit information. Additionally, for users in certain jurisdictions, either vasp_id or is_verified_self_hosted_wallet must be provided when creating address book entries.


Exchange began enforcing the following validation logic:

  • REST & FIX: Extra leading zeros on quantities and prices are not accepted. They must be in standard form.
  • FIX only: When sending market orders, only CashOrderQty or OrderQty can be included on the order, not both.
  • REST only: When sending market orders, only size or funds can be included on the order, not both.


Added the following RFQ features to production:


  • Quote (S): The response was reduced to 250ms (from 1000ms).
  • MiscFeeAmt (137): Fees are returned on MiscFeeAmt (137) per product.
    • Fees published on tag 137 match what is available on the REST endpoint.
    • Fees may be published at a rate lower than 5bps on a per-pair basis.


  • /rfq/products (unauthenticated) returns all currently supported and eligible RFQ product pairs and their associated fee rates (maker_fee_bps), plus additional metadata.

    ## Sample Response
    "id": "AAVE-BCH",
    "base_currency": "AAVE",
    "quote_currency": "BCH",
    "enabled": true,
    "maker_fee_bps": "5",
    "rfq_tier": 2

    See Upcoming Changes for RFQ features available in the sandbox.


Added the ability to download FIX specifictions.


The following WebSocket feeds now enforce authentication (in addition to the User channel):

See WebSocket Authentication for instructions.

All Channels

Coinbase recommends that you authenticate all WebSocket channels, but only those noted above are enforced.

Level2 Batch Channel

To continue receiving Level 2 data without authentication, you can use the Level2 Batch Channel, which delivers Level 2 data in batches every 50 milliseconds.


Added the Exchange FIX 5.0 SP2 specification for Order Entry (sandbox only):


API Manage Permission Type

Introduced new MANAGE API key permission type to manage user settings and preferences.

Address Book API

Added functionality for users to manage their Address Books via API:


Added documenation on Systems & Operations


Updated the Exchange FIX 4.2 specification


FIX Resend Requests (or FIX "Replay") is live in production. Resend requests are sent by the receiving application to initiate the retransmission of messages.

7BeginSeqNoSequence number of first message in range to be resent
16EndSeqNoSequence number of last message in range to be resent


We added USD USDC unification which lets Coinbase Exchange users update their settlement preference to be either the stable coin counterpart for a fiat currency, or the fiat currency itself.


Added functionality for users to stake-wrap ETH to CBETH via Web & API:

Learn more at Coinbase Exchange CBETH Stake Wrap Instructions.


We added a new Level3 WebSocket channel which is a compact, low bandwidth, and easier to parse version of the Full channel.


Added new apy field to Get Wrapped Asset Details.

Implied APY is the current annualized percentage yield earned as the net rewards by the staked ETH underlying cbETH. This estimate is based on the past 7 days of staking performance and is updated daily. For more details, refer to the "rate calculation" section of the cbETH whitepaper.


We added a time property that denotes the last time our system processed an update.


Get product book now returns time as a property when passing in "level=L1" / "level=L2" / "level=L3" on the /products/{product_id}/book/ endpoint.

Websocket API

Level2 Channel now includes the time property on the level2 snapshot message.


We updated the Market Data feed: client-oid was removed from the unauthenticated Full Channel Received message.

The client-oid field will still be available in the authenticated Full Channel, and also the User Channel (which also requires authentication). You can only see your own client-oid.


FIX Execution Report ExecID

We released a change to how we publish the FIX tag, ExecID (Tag=17). ExecID will now be consistent across sessions for the same underlying Execution Report. This should allow users the ability to join Execution Reports between their trading session and their drop-copy session for the same profile ID.

FIX Market Data Gateway

We released FIX Market Data gateway (beta) to production. It is based on the FIX 5.0 SP2 specification.

  • Sandbox URL: tcp+ssl//
  • Production URL: tcp+ssl//

This new offering provides an L3 feed only with direct, low-latency, deterministic access. Users must connect with the same authentication as our existing FIX order-entry system.


Expire Time Tag

Added FIX message tag ExpireTime to Quote Request (R) and Quote Status Report (AI).

High Bid Limit Percentage

Added new high_bid_limit_percentage field to our products endpoint.

As described in our Trading Rules, the High Bid Limit (HBL) order control limits how high a Buy Limit Order can be filled based on the last sale price or the current best bid price.

Currently, the High Bid Limit is calculated as follows:

  • Last execution price + high_bid_limit_percentage if the current best bid price is < 95% of the last execution execution.
  • Current best bid price + high_bid_limit_percentage otherwise.

HBL is only enforced for specific trading pairs. You can see which trading pairs have an HBL set by looking at the high_bid_limit_percentage field of our /products endpoint.

For example, the following value represents a 3% high bid limit.



We made a breaking change to Get all wrapped assets. Specifically, GET /wrapped-assets/ now returns a list of json objects instead of a list of strings.


Added new Get Wrapped Asset Details endpoint: /wrapped-assets/{wrapped_asset_id}/

Get Wrapped Asset Details returns the following properties:

  • circulating_supply: Customer held wrapped assets, not pre-minted or held in abeyance.
  • total_supply: Wrapped assets that have been minted and exist on-chain.
  • conversion_rate: Underlying staked units that can be exchanged for 1 wrapped asset.

For example:


You can test for cbETH in the sandbox at


Request For Quote on Coinbase Exchange is live in production. RFQ allows liquidity providers to respond and interact with real-time RFQ requests.

New FIX Messages:

New WebSocket Channel: RFQ Matches Channel.

Updated REST API:

  • Order and fill information for RFQ can be queried with new market_type query parameter.
  • New report type option, rfq-fills, can be used to generate reports for RFQ fills.


We released Coinbase Direct Market Data, a WebSocket endpoint with direct access to Coinbase Exchange servers. Authentication is required. You can subscribe to both endpoints, but if ws-direct becomes your primary connection, we recommend using the existing ws-feed as a failover connection.

Coinbase Direct Market Data endpoint: wss://


Updated Get all fills with new response property, market_type, in preparation for the upcoming Request For Quote (RFQ) feature.


Added two new fields to the Ticker Channel: best_bid_size and best_ask_size.


Modify Order Request (G) is live in production. See 2022-JUN-27 for release details.


FIX Logon (A) messages now require that MsgSeqNum (34) be equal to 1. Any other value is rejected.


Added Balance Statement Reports for historical and current crypto/fiat balances, with the Exchange REST API and in the Exchange UI at

The Balance Report API:

  • Leverages the existing /reports endpoint.
  • Adds a new report type of balance.
  • Adds a balance object to the request with datetime (and group_by_portfolio_id for the UI only).
  • Keeps the same response schema (with the possibility that "type"="balance").

Example of Balance Report API Request

// Create balance statement for the portfolio tied to the API key
"balance": {
"datetime": "2022-02-25T05:00:00.000Z",
"email": "",
"format": "csv",
"type": "balance"


Added a new Wrapped Asset API, comprised of two endpoints:


Added a reason field to the WebSocket Full Channel Change message:

  • "reason":"STP" for Self-Trade Prevention message
  • "reason":"modify_order" for Modify Order Request (See 2022-JUN-27 entry for more.)
"type": "change",
"time": "2014-11-07T08:19:27.028459Z",
"sequence": 80,
"order_id": "ac928c66-ca53-498f-9c13-a110027a60e8",
"side": "sell",
"product_id": "BTC-USD",
"old_size": "12.234412",
"new_size": "5.23512",
"price": "400.23"


We added support for multiple blockchain networks. Users can now withdraw USDC on Solana, and ETH, USDC, and MATIC on Polygon.

A new network field was added for select endpoints and in the UI. Affected API endpoints are:

  • /withdrawals/crypto accepts an optional network parameter as part of its POST request parameters.

    This parameter designates which network the currency will be sent on. For example, if the user withdraws USDC on Solana or Ethereum, the withdrawal address is validated against the network, the appropriate fee is calculated based on the network, and the currency is sent over the network. If no network is specified in the POST request, the default network (Ethereum) is used.

  • /address-book validates new addresses against all supported networks for the currency.

  • /address-validation accepts an optional network parameter in the address_info object or source parameter in the body as part of its POST request parameters.

    The address validator uses the network parameter to verify that the address is valid for the designated network. If no network is specified in the POST request, the default network is used.

    The source parameter currently only accepts the value address_book. When source has the value address_book, the address is validated against all supported networks for the currency.

"id": "ATOM",
"name": "Cosmos",
"min_size": "1",
"status": "online",
"message": "",
"max_precision": "0.000001",
"convertible_to": [

"details": {
"type": "crypto",
"symbol": null,
"network_confirmations": null,
"sort_order": 51,
"crypto_address_link": "{{address}}",
"crypto_transaction_link": "{{txId}}",
"push_payment_methods": [
"group_types": [
"display_name": null,
"processing_time_seconds": 5,
"min_withdrawal_amount": 0.1,
"max_withdrawal_amount": 302000
"default_network": "cosmos",
"supported_networks": [
"id": "ETH",
"name": "ethereum",
"status": "offline",
"contract_address": "0x..",
"crypto_address_link": "address_link",
"crypto_transaction_link": "tx_link",
"network_confirmations": 15,
"min_withdrawal_amount": 0.001,
"max_withdrawal_amount": 250


We increased the order size for two FIX batched messages from 10 to 15:


The following API parameters were removed per the lifting of maximum and minimum order size limits:

API ParameterDescription
base_max_sizeBase order size max (limit orders)
base_min_sizeBase order size min (limit orders)
max_market_fundsQuote order size max (market orders)

Affected features are:


Modify Order Request (G) is now available for testing in the public sandbox. It will go to production in a few weeks.

Modify Order Request is an implementation of the Order Replace Request outlined in the FIX 4.2 protocol. You can send a single request to modify the price or size of an existing order using the FIX API.

WebSocket Full channel "Change" messages (and by extension the User channel) are also affected. Three fields are being added (new_price, old_price, reason).


Modify Order Requests that amend size down will retain queue priority in the Exchange order book.


Example FIX Request:

BeginString=FIX.4.2 BodyLength=265 MsgType=ORDER_CANCEL_REPLACE_REQUEST MsgSeqNum=17 SenderCompID=00000000100000000000000000000003 SendingTime=20220609-04:01:48.757 TargetCompID=Coinbase ClOrdID=907b6ae6-bcbe-441a-b7bb-d932afdb9edb OrderID=71de0cdf-938f-495b-9fad-108837bde704 OrderQty=2 OrdType=LIMIT OrigClOrdID=907b6ae6-bcbe-441a-b7bb-d932afdb9eda Price=100.00 Side=BUY Symbol=ETH-USD TransactTime=20220609-04:01:48.757 CheckSum=107
37OrderIDUnique identifier of most recent order as assigned by broker
41OrigClOrdIDClOrdID <11> of previous order (NOT initial order of the day) when canceling or replacing an order
11ClOrdIDUnique identifier of replacement order as assigned by institution.
55SymbolMust match original order
54SideMust match original side
38OrderQtyTotal Intended Order Quantity (including the amount already executed for this chain of orders)
60TransactTimeTime this order request was initiated/released by the trader or trading system
40OrdTypeOnly limit orders are supported for now (2)
44PricePrice per share

Websocket Full Channel Change Message

Example of a change message from a Modify Order Request:


The fields new_price, old_price, and reason are being added. (The reason field was added on 2022-AUG-16.

"type": "change",
"time": "2022-06-06T22:55:43.433114Z",
"sequence": 24753,
"order_id": "c3f16063-77b1-408f-a743-88b7bc20cdcd",
"side": "buy",
"product_id": "ETH-USD",
"old_size": "80",
"new_size": "80",
"old_price": "7",
"new_price": "6"


Lifted maximum and minimum order size limits. With this change:

  • Market orders are no longer subject to max or min size checks unless market funds are specified.
  • Limit orders are now subject to notional minimum size checks only. We repurposed the existing API parameter, min_market_funds, to represent this value.

Price Protection Points serve as a dynamic and real-time protection against slippage for large-sized orders.

The following API parameters have been deprecated (and will be removed June 30):

API ParameterDescription
base_max_sizeBase order size max (limit orders)
base_min_sizeBase order size min (limit orders)
max_market_fundsQuote order size max (market orders)

Affected APIs are Get all known trading pairs and Create a new order.


Changes were made to Coinbase Pro:

  • We disabled the Coinbase Pro API, Deposit from Coinbase account, which lets you deposit funds from a Coinbase retail account into Coinbase Pro. The endpoint /deposits/coinbase-account now returns a 403 when called from a Coinbase Pro account.

    All other payment methods into Coinbase Pro remain the same and Coinbase Exchange is not affected.

  • Creating a new API Key on Coinbase Pro with the Transfer permission has new requirements (the use of old API keys will remain the same):

    • You must enable non-SMS 2FA.

    • You must allowlist all receive addresses for your transfers.

      Creating new API Keys on Coinbase Exchange is not affected by this change.


  • Added cancel reason to the FIX and websocket feeds.
  • For FIX, we enhanced the Execution Report to include the cancel reason using the Text field.
  • For the websocket feed, we added a new cancel_reason field for authenticated messages by the user, accessible in the Full and User channels.

Supported cancel reasons are:

101:Time In Force
102:Self Trade Prevention
104:Price Bound Order Protection
105:Insufficient Funds"
106:Insufficient Liquidity


We enabled new TLS/SSL features on the FIX servers for Exchange/Pro to increase security and performance. This includes limiting the supported ciphers and a new SSL certificate. Please check that your FIX SSL client:

  • Can support the new ciphers listed below.
  • Is not validating a specific SSL server certificate. If it is, you must update to the new certificate.

The new infrastructure will support only TLSv1.2 with the following Supported Server Ciphers:

RecommendLengthCipher SuiteElliptic Curve
Preferred128 bitsECDHE-RSA-AES128-GCM-SHA256Curve P-256 DHE 256
Accepted128 bitsECDHE-RSA-AES128-SHA256Curve P-256 DHE 256
Accepted256 bitsECDHE-RSA-AES256-GCM-SHA384Curve P-256 DHE 256
Accepted256 bitsECDHE-RSA-AES256-SHA384Curve P-256 DHE 256

Affected Endpoints:

  • In sandbox
  • In production

New Production FIX Server SSL Certificate:


New Sandbox FIX Server SSL Certificate:



  • Updated the maximum number of portfolios (or profiles) to 25.


  • Updated the maximum number of portfolios (or profiles) to 15.


  • Added FIX message tags: cumQty, leaveQty, AvgPx


  • REST API will enforce case sensitivity for all URLs.
    • Example: should be Note the lowercase t in ticker.
    • This does not apply to URL parameters, just the URL itself: is valid as the the URL is lowercase. Query parameters such as product_id can have values with capitals. However would be invalid as the O in /Orders is not the same URL as specified in its docs.


  • Web Socket API users are notified when the client is actively disconnected for having a full buffer, or for being too slow to consume or read messages.


  • GET and POST responses for the /orders endpoint will return client order id as client_oid if exists.


  • FIX API will now enforce CheckSum validations for incoming FIX messages.


  • All reports can be generated in parallel. Clients are no longer restricted to only have 3 reports being created at a time. Now clients can have up to 3 accounts reports and 3 fills reports per product generating at a time.


  • Return the full aggregated order book for Level 2 queries under the GET /products/<product-id>/book endpoint.


  • Reduced the set of fields returned by orders in "pending" status for GET /orders, GET /orders/<id>, and GET /orders/client:<client_oid> APIs. See List Orders documentation for more details. Orders with non-pending statuses will be unaffected by this change.


  • Return client order ID rather than order ID in successful cancel order response for REST API endpoint DELETE /orders/client:<client_oid>.


  • Require the field Symbol(55) on the following FIX API messages: OrderCancelRequest(F) and OrderStatusRequest(H). Messages (F) and (H) without Symbol(55) will be rejected.


  • Add pagination support for the GET /fills endpoint.


  • Increased the maximum number of FIX connections allowed per profile from 5 to 7.


  • Added sendingTime 5 minute validation.


  • Added fx_stablecoin to products.


  • Order Cancel Batch Request(U4) will accept optional ClOrdID(11) field for each cancel request. The provided ClOrdID(11) will be included in Order Cancel Reject(9) for partial reject.


  • Order Cancel Batch Request(U4) will now return Order Cancel Reject(9) for partial rejected cancel request.


  • Added failed status to reports.


  • Our API endpoints were moved to from

Production URLs

ProductOld URLNew URL
FIX APItcp+ssl://
Web Socket APIwss://

Sandbox URLs

ProductOld URLNew URL
FIX APItcp+ssl://
Web Socket APIwss://


  • API FIX - Order Cancel Request (F) endpoint requires the Symbol field now.


  • /fills custom rate limit.


  • Increased public and private rate limits.


  • Increase pagination limit from 100 to 1000.


  • Updated max profiles to 10 and max API keys to 200.


  • The Trailing Volume endpoint has been deprecated in favor of the Fees endpoint to get the latest volumes.


  • Now recommending that clients opt to batch cancel orders by profile rather than session due to recent performance optimizations.


  • HandlInst in API FIX is no longer required.


  • Addition of max_withdrawal_amount field in the /currencies endpoint.


  • Authed users subscribed to the Websocket Full or User channel will now receive their order fee rates on match messages. Details can be found in documentation for the Full channel.


  • Addition of cancel_code field on canceled withdrawals.


  • Addition of an endpoint to provide estimates of network fees for crypto withdrawals.
  • Addition of a parameter for crypto withdrawals to specify if the network fee should be added / deducted from the requested amount.
  • 'fee' and 'subtotal' fields added to responses for crypto withdrawals.


  • The candles endpoint no longer has custom rate limits. It now shares the same rate limit with every other public endpoint.


  • The maximum number of open orders (i.e. limit orders + stop orders) per product per profile will be 500. Profiles that exceed this threshold will be unable to place new orders on that product until the number of open orders is below 500.



  • Generate an address for crypto deposits. See reference here.


  • Expose min_market_funds, max_market_funds fields in the /products endpoint.


  • Users can retrieve information regarding their transfer, buy, and sell limits at /users/self/exchange-limits. Refer to the Limits API for more information.


  • Fill execution reports will show fee rates associated with the user's order. Refer to the FIX ExecutionReport API for details on format.


  • Execution Reports from Order Status Requests will return ClOrdID, if it is supplied, even if the order isn't found.


  • Activate messages on the Websocket feed will no longer expose taker_fee_rate.


  • Rate limiting changing from a per user basis to per profile basis.


  • Order Status Request no longer allows the wildcard option.
  • Order Status Request returns pending and done orders when you use OrderID or ClOrdID.
  • Scheduled disconnects are on Mondays and Thursdays at 11 AM Pacific Time.

Was this helpful?