NAV
Example

Introduction

Welcome to Globe developer application programming interface (API). The API allows our customers to interface with their accounts using custom written software.

API Client Libraries

We support Python and Typescript client libraries at present, you can find these libraries here.

Request limits

Do not make more than 10 requests per second or we may block your IP. For real time data please refer to the WebSocket API, or FIX API.

Request types

Our HTTP REST endpoints are all application/json content type and follow typical HTTP response status codes for success and failure.

A successful request will result in an HTTP 200 response and may contain an optional body. If the response has a body it will be documented under each resource below.

Errors

HTTP REST and WebSocket services may produce a JSON error response in the following form:

{ "error": "invalid-instrument", "detail": "LTCXBT" }

The following error types may be encountered:

TypeDescription
missing-headerA required HTTP header is missing
invalid-headerAn HTTP header has invalid content
needs-authenticationThis service or channel requires authentication
token-expiredA verification token has expired or is invalid
invalid-base64A base 64 encoded field could not be decoded
non-increasing-nonceHMAC nonce must be larger than the previous value
invalid-signatureHMAC signature was not valid
invalid-api-keyThe provided API key is invalid or was deleted
rate-limit-exceededToo many requests received from this connection
exchange-busyThe exchange currently cannot accept new orders due to high load
unsupported-messageThis message type is not supported by the API. For example binary websocket messages are not supported
invalid-requestThe request has missing fields or fields with the wrong data types
invalid-jsonThe request contained JSON syntax errors
invalid-instrumentThe provided instrument is not a valid product
internalAn internal error occurred

Types

Timestamps

Unless explicitly specified, all timestamps from API are returned in Unix Millisecond Timestamp. Make sure you can parse the Unix Millisecond Timestamp format. Most modern languages and libraries will handle this without issues.

Numbers

Decimal numbers are returned as strings to preserve full precision across platforms. When making a request, it is recommended that you also convert your numbers to strings to avoid truncation and precision errors.

Integer numbers are unquoted.

Instruments

The instruments, are specified as a string parameter and can take one of the following supported instruments:

InstrumentInstrument parameter
Bitcoin / US Dollar“XBTUSD”
Ethereum / US Dollar“ETHUSD”
Ripple / US Dollar“XRPUSD”
EOS / US Dollar“EOSUSD”
TRON / US Dollar“TRXUSD”
Litecoin / US Dollar“LTCUSD”

Resolutions

The price history endpoints take a resolution parameter, which can be one of the following values:

ResolutionResolution parameter
1 minute“1m”
3 minutes“3m”
5 minutes“5m”
15 minutes“15m”
30 minutes“30m”
1 hour“1h”
2 hours“2h”
4 hours“4h”
6 hours“6h”
12 hours“12h”
1 day“1d”
3 days“3d”
1 week“1w”

HTTP API

The HTTP API is presently only used for market data and is an unauthenticated set of endpoints for retrieving market data. These endpoints provide snapshots of market data.

Errors

Unless otherwise stated, any errors will result in HTTP 4xx or 5xx status codes.

Common error codes:

Status CodeReason
400Bad Request – Invalid request format
401Unauthorized – Invalid API Key
403Forbidden – You do not have access to the requested resource
404Not Found
500Internal Server Error – We had a problem with our server

Most errors will also carry a JSON body, with further information about the error.

Get Historic Market Rates

curl "https://dev.globedx.com/api/v1/history/XBTUSD/candles/1m"

The above command returns JSON structured like this:

[
  {
    "time": 1572266460000,
    "open": 9365500,
    "high": 9366000,
    "low": 9364500,
    "close": 9364500,
    "volume": 3424204
  },
  {
    "time": 1572266400000,
    "open": 9370000,
    "high": 9370500,
    "low": 9365500,
    "close": 9365500,
    "volume": 6137236
  }
]

Historic rates for a product. Rates are returned in grouped buckets based on requested resolution.

HTTP Request

GET /api/v1/history/<instrument>/candles/<resolution>

Parameters

Parameter NameDescription
fromStart time in Unix Millisecond Timestamp
toEnd time in Unix Millisecond Timestamp
maxMaximum amount of historical candles, note the maximum is 1440 candles

Details

The above parameters are optional.

If only the from field is specified, the maximum number of historical candles will be returned from that timestamp.

If only the to field is specified, the maximum number of historical candles will be returned up to that timestamp.

If both from and to fields are specified, the maximum number of historical candles will be returned within the specified range, starting at the from timestamp. The maximum number of candles that can be retrieved in one request is 1000.

Response Items

Each candle is an object with the following fields:

Get Historic Index Price Rates

curl "https://dev.globedx.com/api/v1/history/index-price/XBTUSD/candles/1m"

The above command returns JSON structured like this:

[
  {
    "time": 1572266460000,
    "open": 9365500,
    "high": 9366000,
    "low": 9364500,
    "close": 9364500,
    "volume": 0
  },
  {
    "time": 1572266400000,
    "open": 9370000,
    "high": 9370500,
    "low": 9365500,
    "close": 9365500,
    "volume": 0
  }
]

Historic index price rates for a product. Rates are returned in grouped buckets based on requested resolution.

HTTP Request

GET /api/v1/history/index-price/<instrument>/candles/<resolution>

Parameters

Parameter NameDescription
fromStart time in Unix Millisecond Timestamp
toEnd time in Unix Millisecond Timestamp
maxMaximum amount of historical candles, note the maximum is 1440 candles

Details

The above parameters are optional.

If only the from field is specified, the maximum number of historical candles will be returned from that timestamp.

If only the to field is specified, the maximum number of historical candles will be returned up to that timestamp.

If both from and to fields are specified, the maximum number of historical candles will be returned within the specified range, starting at the from timestamp.

Response Items

Each candle is an object with the following fields:

WebSocket API

The WebSocket API provides near real-time market data updates for orders, trades and user account functions.

wss://globedx.com/api/v1/ws Near real-time market data updates provide the fastest insight into order flow and trades. This however means that you are responsible for reading the message stream and using the message relevant for your needs which can include building real-time order books or tracking real-time trades.

Overview

The WebSocket API uses a bidirectional protocol, which encodes all messages as JSON objects.

Please note that new message types can be added at any point in time. Clients are expected to ignore messages they do not support.

The WebSocket API support several commands, for placing and cancelling orders, as well as for subscribing to data channels. The following commands are supported:

CommandArgumentsDescription
loginpassphrase, api_key, nonce, signatureAuthenticate the connection, to place and cancel orders and to subscribe to private channels. See authentication documentation.
subscribeChannel name, other channel-specific argumentsSubscribe to a channel
unsubscribeChannel name, other channel-specific argumentsUnsubscribe from a channel. Provide the exact arguments as in the original subscription request
place-orderPlace a new order
cancel-orderCancel an existing order

Login

See authentication documentation for instructions on constructing an authenticated websocket connection. Private websocket endpoints cannot be used unless a connection is authenticated.

Subscribe

A typical subscription request message:

{
  "command": "subscribe",
  "channel": "index-price",
  "instrument": "XBTUSD"
}

Subscribe to a channel. All subscription requests require a channel parameter, but some subscriptions have additional required parameters. See the documentation on individual channels for more information.

You may simultaneously subscribe to any number of channels, including the same channel with different parameters. The details of the original subscription are included with each message, so that you can correlate them.

Unsubscribe

A typical unsubscribe request message:

{
  "command": "unsubscribe",
  "channel": "index-price",
  "instrument": "XBTUSD"
}

Unsubscribe from an existing channel subscription. A subscription is identified by the channel and by all other parameters; a subscription to index-price for instrument XBTUSD is a different subscription than index-price for ETHUSD , and each must be unsubscribed separately.

Authentication

To authenticate a connection, construct headers as follows:

{
  "X-Access-Passphrase": "XXXXXXXXXXXXXX",
  "X-Access-Key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  "X-Access-Nonce": 1587654321,
  "X-Access-Signature": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Connections to the WebSocket are not initially authenticated, and may only access public data. To authenticate a connection, in order to place trades and access private account information, you must first obtain an API key from the your user account page.

During the process of creating a new API key, you will provide a passphrase and will be given a secret. You will need to keep these details safe as they are not otherwise retrievable later, but are needed for authenticating a connection.

In JavaScript, the headers may be generated as follows:

const crypto = require('crypto');

const secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const passphrase = 'XXXXXXXXXXXXXX';
const nonce = new Date().getTime();

const hmac = crypto.createHmac('sha256', Buffer(secret, 'base64'));
const signature = hmac.update( `${nonce}GET/api/v1/ws}` ).digest('base64');

const login_headers = {
    'X-Access-Passphrase': passphrase,
    'X-Access-Key': api_key,
    'X-Access-Nonce': nonce,
    'X-Access-Signature': signature
};

The api_key is the key that you wish to use and passphrase is the passphrase you chose when creating it. nonce is an integer, which must be strictly greater than the previous value you used. For simplicity, we recommend using an integer derived from the current date and time.

The signature value is constructed using the following steps:

  1. Construct the signing text, by concatenating the decimal string representation of the nonce with the string "GET/api/v1/ws". For example, using the message to the right, the message is "1587654321GET/api/v1/ws".
  2. Create an HMAC signature from the signing text, using a SHA-256 hashing function and the secret.
  3. Base64-encode the HMAC signature.

Include these headers when connecting to the websocket endpoint. Invalid authentication headers will result in a HTTP 400 (Bad Request) error.

Errors

Example error response for invalid parameters in request:

{
  "error": "invalid-request"
}

If there is an error in processing a websocket request, the websocket responds directly with a body containing one of the following errors types:

ErrorError Body
Need to be authenticated to subscribe or perform this function“not-authenticated”
Message body was invalid, check parameters and channel name“invalid-request”
Request is over the rate limit, please try reducing the frequency of requests to be within our specified rate limit“over-rate-limit”
Request was not received, as the exchange was temporarily busy, try again at a later time“exchange-busy”

Rate limit

Each websocket connection is rate limited to only allow 50 requests per second (using a token bucket algorithm with a burst size window of 1 second). If the requests per second goes over this, your requests will not be processed and you will see an above error code of over-rate-limit per request as described above. We recommend to ensure your requests per second are under this rate limit, to ensure your requests get processed.

WebSocket Public Channels

Public channels do not require authentication.

Authentication

Messages related to authentication status. Authentication is subscribed automatically, so you will always receive authentication error messages.

Index Price

Subscription message:

{
  "command": "subscribe",
  "channel": "index-price",
  "instrument": "XBTUSD"
}

Example response:

{
  "subscription": {
    "channel": "index-price",
    "instrument": "XBTUSD"
  },
  "data": {
    "price": 12000.0
  }
}

Get the current index price for a particular instrument.

Arguments

ArgumentRequiredDescription
instrumentYesThe symbol for the instrument

Response

FieldDescription
priceThe latest value of the index price for the given instrument

Market Depth

Subscription message:

{
  "command": "subscribe",
  "channel": "depth",
  "instrument": "XBTUSD"
}

Example response:

{
  "subscription": {
    "channel": "depth",
    "instrument": "XBTUSD"
  },
  "data": {
    "bids": [
      {
        "price": 100.0,
        "volume": 89
      }
    ],
    "asks": [
      {
        "price": 105.0,
        "volume": 12
      }
    ]
  }
}

The top 25 bid and ask levels of the order book for the given instrument. Updates are sent at a fixed frequency of twice a second and not necessarily for every change.

Response

FieldDescription
bidsAn array of bids, each with a price and volume field
asksAn array of asks, each with a price and volume field

Product List

Subscription message:

{
  "command": "subscribe",
  "channel": "product-list"
}

Example response:

{
  "subscription": {
    "channel": "product-list"
  },
  "data": [
    {
      "name": "Bitcoin",
      "symbol": "XBTUSD"
    },
    {
      "name": "Ethereum",
      "symbol": "ETHUSD"
    }
  ]
}

A list of all available products, including the instrument symbol and display name.

Response

FieldDescription
nameDisplay name of the instrument
symbolTrading symbol of the instrument

Product Detail

Subscription message:

{
  "command": "subscribe",
  "channel": "product-detail",
  "instrument": "XBTUSD"
}

Example response:

{
  "subscription": {
    "channel": "product-detail",
    "instrument": "XBTUSD"
  },
  "data": {
    "funding_period": 28800,
    "next_funding_time": 1572266400000,
    "max_leverage": 100,
    "maker_fee": 0.0025,
    "taker_fee": 0.0075,
    "tick_size": 1.0
  }
}

Full information about a product, including funding information and fees.

Response

FieldDescription
funding_periodFunding period for the contract
next_funding_timeUnix Millisecond Timestamp of the next funding time
max_leverageMaximum leverage allowed for that instrument
maker_feeMaker fee percentage, providing orders to the book that are not instantly traded
taker_feeTaker fee percentage, for providing orders to the book that are instantly traded
tick_sizeTick size in the market

Recent Trades

Subscription message:

{
  "command": "subscribe",
  "channel": "trades",
  "instrument": "XBTUSD"
}

Example response:

{
  "subscription": {
    "channel": "trades",
    "instrument": "XBTUSD"
  },
  "data": [
    {
      "price": 9355,
      "quantity": 22806,
      "side": "sell"
    },
    {
      "price": 9355,
      "quantity": 4677,
      "side": "sell"
    },
    {
      "price": 9355,
      "quantity": 1870,
      "side": "sell"
    }
  ]
}

The 100 most recent trades, including the price, side and quantity. Updates are sent at a fixed frequency of twice a second and not necessarily for every trade.

Response

FieldDescription
pricePrice of order
quantityQuantity of order
sideSide type, can be either sell or buy

Market Overview

Subscription message:

{
  "command": "subscribe",
  "channel": "market-overview",
  "instrument": "XBTUSD"
}

Example response:

{
  "subscription": {
    "channel": "market-overview",
    "instrument": "XBTUSD"
  },
  "data": {
    "price_change_percent": 65.25,
    "volume": 150,
    "funding_rate": -0.01
  }
}

Summary statistics for the daily market activity for the requested requested instrument, including percentage price change, total volume traded over the preceding 24 hours and the current funding rate percentage. Each response message will contain at least one field.

Response

FieldDescription
price_change_percentPercentage change of the price over the last 24 hours
volumeTotal volume traded over the last 24 hours
funding_rateCurrent funding rate percentage

Open Interest

Subscription message:

{
  "command": "subscribe",
  "channel": "open-interest",
  "instrument": "XBTUSD"
}

Example response:

{
  "subscription": {
    "channel": "open-interest",
    "instrument": "XBTUSD"
  },
  "data": {
    "num_contracts": 1002
  }
}

Current number of contracts open in an instrument market

Response

FieldDescription
num_contractsCurrent number of contracts open in an instrument market

Insurance Fund

Subscription message:

{
  "command": "subscribe",
  "channel": "insurance-fund"
}

Example response:

{
  "subscription": {
    "channel": "open-interest"
  },
  "data": {
    "balance": 0.5
  }
}

Current insurance fund balance in bitcoin

Response

FieldDescription
balanceCurrent insurance fund balance in bitcoin

WebSocket Private Channels

The following channels require authentication, please make sure you have authenticated correctly before attempting to communicate on the following channels.

It would be advised to subscribe to the My Market Events channel first, to receive the responses when placing orders and cancelling orders.

My Market Events

Subscription message:

{
  "command": "subscribe",
  "channel": "my-market-events",
  "instrument": "XBTUSD"
}

Subscribe to the my-market-events channel to listen to all of your associated market events. These form acknowledgments, and market event information in response to the private account requests, such as placing an order, cancelling an order. You can expect to see these market event response types:

Market Event responses

EventDescription
order-receivedOrder of request_id was successfully received by Globe
order-addedOrder of request_id was added to the book
order-cancelledOrder of request_id was cancelled successfully
request-rejectedOrder of request_id was rejected, with the reason for the order being rejected
tradedOrder of order_request_id was traded successfully

Order response

{
  "subscription": {
    "channel": "my-market-events",
    "instrument": "XBTUSD"
  },
  "data": {
    "event": "order-received",
    "request_id": 99,
    "side": "sell",
    "price": 87,
    "quantity": 255,
    "order_type": "market"
  }
}

Order Received response

FieldDescription
eventEvent type, i.e. order-received
request_idrequest_id of the order, assigned by Globe
sideSide type, can be either sell or buy
pricePrice of order
quantityQuantity of order
order_typeOrder type, can be either market or limit

Order Added response

{
  "subscription": {
    "channel": "my-market-events",
    "instrument": "XBTUSD"
  },
  "data": {
    "event": "order-added",
    "request_id": 99,
    "side": "buy",
    "price": 87,
    "quantity": 255,
    "order_type": "post-only"
  }
}

Order Added response

FieldDescription
eventEvent type, i.e. order-added
request_idrequest_id of the order, assigned by Globe
sideSide type, can be either sell or buy
pricePrice of order
quantityQuantity of order
order_typeOrder type, can be either market or limit

Order Cancelled response

{
  "subscription": {
    "channel": "my-market-events",
    "instrument": "XBTUSD"
  },
  "data": {
    "event": "order-cancelled",
    "request_id": 105
  }
}

Order Cancelled response

FieldDescription
eventEvent type, i.e. order-cancelled
request_idrequest_id of the order, assigned by Globe

Order Rejected response

{
  "subscription": {
    "channel": "my-market-events",
    "instrument": "XBTUSD"
  },
  "data": {
    "event": "request-rejected",
    "reason": "NotEnoughMargin"
  }
}

Order Rejected response

FieldDescription
eventEvent type, i.e. request-rejected
reasonReason that the order was rejected

Traded Event response

{
  "subscription": {
    "channel": "my-market-events",
    "instrument": "XBTUSD"
  },
  "data": {
    "event": "traded",
    "price": 888,
    "quantity": 1001,
    "side": "buy",
    "order_request_id": 7
  }
}

Traded Event response

FieldDescription
eventEvent type, i.e. traded
pricePrice of order
quantityQuantity of order
sideSide type, can be either sell or buy
order_request_idrequest_id of the order that was traded

Place Order

Input message:

{
  "command": "place-order",
  "instrument": "XBTUSD",
  "price": 100,
  "quantity": 250,
  "order_type": "limit",
  "side": "sell"
}

{
  "command": "place-order",
  "instrument": "XBTUSD",
  "quantity": 425,
  "order_type": "market",
  "side": "buy"
}

Place an order for a particular instrument and get a response on the my market events channel to indicate the order status.

Arguments

ArgumentRequiredDescription
instrumentYesThe symbol for the instrument
priceYesPrice of the instrument for a limit order. Must be omitted for a market order
quantityYesOrder quantity of the instrument
order_typeYesOrder type, can be either market or limit
sideYesSide type, can be either sell or buy

Cancel Order

Input message:

{
  "command": "cancel-order",
  "instrument": "XBTUSD",
  "order_id": "77"
}

Place a request to cancel an order with given order_id.

Arguments

ArgumentRequiredDescription
instrumentYesThe symbol for the instrument
order_idYesorder_id of the order to cancel

Stop Order

Input message:

{
  "command": "stop-order",
  "trigger": 99,
  "order": {
    "instrument": "XBTUSD",
    "price": 100,
    "quantity": 250,
    "order_type": "market",
    "side": "sell"
  }
}

Stop Order, execute a place order when the instrument price reaches the set trigger value.

Arguments

ArgumentRequiredDescription
triggerYesThe trigger price for the order
orderYesThe order to place, specified as in Place Order

My Open Orders

Subscription message:

{
  "command": "subscribe",
  "channel": "my-orders",
  "instrument": "XBTUSD"
}

Example response:

{
  "subscription": {
    "channel": "my-orders",
    "instrument": "XBTUSD"
  },
  "data": {
    "3": {
      "type": "order",
      "price": 123,
      "quantity": 500,
      "filled_quantity": 0,
      "order_type": "limit",
      "side": "buy",
      "timestamp": 1593000000
    },
    "4": {
      "type": "order",
      "price": 456,
      "quantity": 600,
      "filled_quantity": 0,
      "order_type": "limit",
      "side": "sell",
      "timestamp": 1593000010
    }
  }
}

Request your open orders for a given instrument.

My Account Overview

Subscription message:

{
  "command": "subscribe",
  "channel": "my-account-overview"
}

Subscribe to account overview messages, responses are periodically every second.

My Account Overview response

{
  "subscription": {
    "channel": "my-account-overview"
  },
  "data": {
    "available_balance": 85,
    "account_balance": 100,
    "unrealized_pnl": 5,
    "maintenance_margin": 10,
    "initial_margin": 20,
    "margin_balance": 105
  }
}

If your margin balance falls below maintenance margin requirements, you can only place orders that reduce your position.

My Account Overview response

FieldDescription
available_balanceBalance available for withdrawal or placing new orders
account_balanceCurrent balance, excluding unrealized profit and margin allowance
margin_balanceSum of account balance and unrealized profit and losses
unrealized_pnlProfit or loss on your open positions if you were to sell them now
initial_marginThe amount of margin_balance required to place orders
maintenance_marginIf your margin balance falls below the maintenance_margin, your account will be liquidated

My Positions

Subscription message:

{
  "command": "subscribe",
  "channel": "my-positions"
}

Subscribe to positions messages, responses are periodically upon every change.

My Positions response

{
  "subscription": {
    "channel": "my-positions"
  },
  "data": {
    "XBTUSD": {
      "quantity": 10,
      "avg_price": 8000.0
    }
  }
}

My Positions response

FieldDescription
quantityQuantity of contracts for that position
avg_priceAverage price of contracts for that position

FIX API

FIX (Financial Information eXchange) is a standard protocol which can be used to enter orders, submit cancel requests, and receive fills. Users of the FIX API will typically have existing software using FIX for order management. Users who are not familiar with FIX should first consider using the websocket API. Currently FIX is only offered in colocation with the exchange.

Access

For information about FIX colocation access, please contact support@globedx.com.

Message Format

All FIX messages must consist of a header, body followed by a trailer. The fields required in the header and trailer are fixed, whilst the fields required for the message’s body depend on its MsgType which is specified in the header.

Sample FIX message to Globe’s FIX gateway:

8=FIX.4.4|9=131|35=D|34=2|49=CLIENT1|52=20190621-14:41:31.597000|56=globeDX|11=654321|38=10|40=2|44=10000|54=1|55=XBTUSD|59=1|60=20190621-14:41:31|10=204|

Required fields

Each message field is marked by one of the following characteristics:

RequiredComments
YTag is required
Y*Tag required by Globe, but not required by standard FIX 4.4 protocol
NTag not required
N*Tag not required by Globe, but required by standard FIX 4.4 protocol
CTag is conditionally required

The header identifies the message type, length, destination, sequence number, origination point and time.

TagField NameRequiredTypeComments
8BeginStringYStringIdentifies beginning of new message and protocol version. Must equal FIX.4.4. Always unencrypted. Must be first field in message.
9BodyLengthYLengthMessage length, in bytes, forward to the CheckSum field. Always unencrypted. Must be second field in message.
35MsgTypeYStringDefines message type. Always unencrypted. Must be third field in message.
49SenderCompIDYStringAssigned value used to identify client sending message. Always unencrypted.
56TargetCompIDYStringAssigned value used to identify receiving firm. Must be globeDX. Always unencrypted.
34MsgSeqNumYSeqNumInteger message sequence number.

Trailer

Each message, administrative or application, is terminated by a standard trailer. The trailer is used to segregate messages and contains the three-digit character representation of the checksum value.

TagField NameRequiredTypeComments
10CheckSumYStringThree byte, simple checksum.

Always unencrypted. Always last field in message.

Logon (A)

In order to establish a FIX session, each FIX Client must initiate a TCP/IP socket connection to the Globe FIX Gateway and subsequently submit a Logon (MsgType = ‘A’) FIX message equipped with Username (553) and Password (554).

TagField NameRequiredTypeComments
98EncryptMethodYintMust be 0 (none)
108HeartBtIntYintHeartbeat interval. Must be 30 (seconds)
141ResetSeqNumFlagNbooleanIndicates that both sides of the FIX session should reset sequence numbers.
553UsernameY*intGlobe provided Trading ID
554PasswordY*StringPlease call support to set up a password

Logout (5)

The Logout (5) message initiates or confirms the termination of a FIX session. Disconnection without the exchange of Logout (5) messages should be interpreted as an abnormal condition.

TagField NameRequiredTypeComments
58TextNStringLogout reason

Heartbeat (0)

Sent by both sides if no messages have been sent for HeartBtInt seconds as agreed during logon. May also be sent in response to a Test Request.

TagField NameRequiredTypeComments
112TestReqIDNStringIf sent in response to a ‘test request’, this will be the TestReqID

Test Request (1)

May be sent at any time by either side.

TagField NameRequiredTypeComments
112TestReqIDYStringFree text body that will be returned in a heartbeat message if test is successful

New Order Single (D)

Sent by the client to enter an order.

TagField NameRequiredTypeComments
11ClOrdIDYStringUnique identifier of the order as chosen by the client
55SymbolYStringTicker symbol. Valid values: XBTUSD, XRPUSD, ETHUSD, TRNUSD, EOSUSD
54SideYintMust be 1 to buy or 2 to sell
60TransactTimeYUTCTimestampTime of order creation.
38OrderQtyYQtyQuantity ordered.
40OrdTypeYintMust be 1 for market or 2 for limit. All other values are rejected with a BusinessRejectMessage(j)
44PriceCPricePrice of the limit order. Required for OrdType(40) = 2 (limit)
18ExecInstNStringFor Limit Orders, ‘A’ indicates it is a post-only (non-crossing) order. All other values are ignored

Execution Report (8)

FIX message “Execution Report (8)” is used to:

Confirm the receipt of an order; confirm changes to an existing order (i.e. accept cancel request); relay order status information; relay fill information on working orders; reject orders.

TagField NameRequiredTypeComments
11ClOrdIDY*StringUnique identifier of the order or cancel request, this Execution Report relates to, as assigned by the client
37OrderIDYStringUnique identifier of the order assigned by globeDX.
41OrigClOrdIDCStringClOrdID (11) of the cancelled order. Conditionally required for response to Cancel request (ExecType (150) = Canceled).
17ExecIDYStringUnique identifier of Execution Report (8) message as assigned by globeDX. Note special beheviour below (1).
150ExecTypeYcharExecution report type: 0 for new order, 4 for cancelled, 8 for rejected, and F for trade (partial fill or fill)
39OrdStatusYcharIdentifies current status of order. 0 for new, 1 for partially filled, 2 for filled, 4 for cancelled, 8 for rejected
55SymbolYStringTicker symbol. Valid values: XBTUSD, XRPUSD, ETHUSD, TRNUSD, EOSUSD
54SideYcharSide of order. Must be 1 for buy or 2 for sell
40OrdTypeNcharOrder type. Must be 1 for market or 2 for limit
32LastQtyСQtyQuantity bought/sold on this fill. Required if ExecType (150) = ‘F’ (Trade).
31LastPxСPricePrice of this fill. Required if ExecType (150) = ‘F’ (Trade).
151LeavesQtyYQtyQuantity open for further execution. Always 0 for ExecType=’8’ (Rejected).
14CumQtyYQtyCurrent quantity for the order. Always 0 for ExecType=’8’ (Rejected) and ExecType=’4’ (Canceled).
6AvgPxYPriceAlways 0.
60TransactTimeNUTCTimestampTime of execution
  1. ExecId can in certain cases be zero where the FIX standard does not normally allow it: for rejections to to Duplicate ClOrdID or Cancellations where OrigClOrdID is unknown.

Order Cancel Request (F)

Sent by the client to completely cancel an order. To partially cancel an order, please use Order Cancel/Replace request (G).

TagField NameRequiredTypeComments
41OrigClOrdIDYStringClOrdID (11) of the previous non-rejected order when canceling an order. This ID will be used to find the order to be cancelled.
11ClOrdIDYStringUnique ID of cancel request as assigned by the client
37OrderIDNStringUnique identifier of the order with Globe.
55SymbolYStringTicker symbol. Valid values: XBTUSD, XRPUSD, ETHUSD, TRNUSD, EOSUSD
54SideYint1 for buy, 2 for sell
60TransactTimeNUTCTimestampTime this order request was initiated/released by the trader or trading system.

Order Cancel/Replace Request (G)

Sent by the client to change the parameters of an existing order. To completely cancel an order, please use Order Cancel Request (F). Order cancel/replace will change any valid attribute of an open order (i.e. reduce/increase quantity, change limit price, etc.)

TagField NameRequiredTypeComments
41OrigClOrdIDYStringClOrdID (11) of the previous non-rejected order when canceling an order.
11ClOrdIDYStringUnique ID of cancel request as assigned by the client
55SymbolYStringTicker symbol. Valid values: XBTUSD, XRPUSD, ETHUSD, TRNUSD, EOSUSD
54SideYint1 for buy, 2 for sell
38OrderQtyYintOrder quantity. Must be a positive integer. If this value is reduced from the original value submitted in the New Order message, the order will maintain priority in the order book. If this value is increased, the order will lose priority on the order book.
40OrdTypeYintMust be 1 for market or 2 for limit
44PriceCPricePrice of the limit order. Required for OrdType(40)=2 (limit)
60TransactTimeN*UTCTimestampTime this order request was initiated/released by the trader or trading system.

Reject (3)

Sent by either side upon receipt of a message which cannot be processed due to message formatting issues, e.g. due to missing fields or an invalid message type.

TagField NameRequiredTypeComments
45RefSeqNumYSeqNumMsgSeqNum (34) of rejected message.
371RefTagIDNintThe tag number of the FIX field being referenced
372RefMsgTypeNStringThe MsgType (35) of the FIX message being referenced.
373SessionRejectReasonNintCode to identify reason for reject. 1 - required tag missing, 5 - value is out of range for tag, 6 - incorrect data format for value, 11 - invalid MsgType (35)
58TextNStringHuman-readable description of the error (optional)

Order Cancel Reject (9)

Sent by the exchange to indicate that it cannot honour an Order Cancel Request (F) or Order Cancel/Replace Request (G).

TagField NameRequiredTypeComments
41OrigClOrdIDYStringClOrdID (11) of the previous non-rejected order when canceling an order.
11ClOrdIDYStringUnique ID of cancel request as assigned by the client
37OrderIDYStringUnique identifier of the order with Globe.
39OrdStatusYcharIdentifies current status of order. 0 for new, 1 for partially filled, 2 for filled, 4 for cancelled, 8 for rejected
434CxlRejResponseToYint1 if responsing to Order Cancel Request (F), 2 if responding to Order Cancel Replace Request (G)
102CxlRejReasonNintReason for the rejection

In some cases Order Cancel Request can be rejected using a Business Message Reject(j) rather than an Order Cancel Reject. You’ll need to check for both messages.

Business Message Reject (j)

Sent by the server upon receipt of a message that cannot be processed due to business logic reasons, e.g. unknown instrument, trading suspended or unknown order ID. A business message reject message can be returned if an order cancel is rejected, with the reason specified.

TagField NameRequiredTypeComments
45RefSeqNumNSeqNumMsgSeqNum (34) of rejected message.
372RefMsgTypeYStringThe MsgType (35) of the FIX message being referenced.
379BusinessRejectRefIDNStringThe value of the business-level “ID” field on the message being referenced. Required unless the corresponding ID field (see list above) was not specified.
380BusinessRejectReasonYint0 for any of {not enough margin, incorrect price tick size, order would match}, 1 for unknown order, 2 for unknown instrument, 3 for unsupported message type, 4 for trading suspended, 5 for conditionally required field missing, 6 for not authorised
58TextNStringHuman-readable description of the error (optional)