Order
Submit a new order. Requires a signed payload in HMAC-SHA256 form to be appended to the x-signature header. The signed payload must be base64-encoded.
Javascript example:
const formurlencoded = require('form-urlencoded').default;
const crypto = require("crypto-js");
const fetch = require("node-fetch");
const API_KEY = "<YOUR_API_KEY>";
const SECRET_KEY = "<YOUR_SECRET_KEY>";
(async function() {
const payload = {pair: 'USD_BTCCALL_PERP', side: 'BUY', price: 1, qty: 0.001, timestamp: Date.now()};
const payload_url_encoded = formurlencoded(payload);
const HMAC = crypto.HmacSHA256(payload_url_encoded, SECRET_KEY).toString(crypto.enc.Base64);
const submitted = await fetch('https://api.testnet.everstrike.io/auth/order', {method: 'POST', body: payload_url_encoded, headers: {'content-type': 'application/x-www-form-urlencoded', 'x-api-key': API_KEY, 'x-signature': HMAC}});
const response = await submitted.json();
console.log(response);
})();
Python example (Python3):
import requests
import urllib
import hmac
import hashlib
import base64
from time import time
api_key = '<YOUR_API_KEY>'
secret_key = '<YOUR_SECRET_KEY>'
url='https://api.testnet.everstrike.io/auth/order'
payload = {'pair': 'USD_BTCCALL_PERP', 'side': 'BUY', 'price': 1, 'qty': 0.001, 'timestamp': time()*1000.0}
urlencoded_payload = urllib.parse.urlencode(payload)
hmac_signature = hmac.new(bytes(secret_key , 'utf-8'), msg = bytes(urlencoded_payload , 'utf-8'), digestmod = hashlib.sha256).digest()
hmac_signature_base64 = base64.b64encode(hmac_signature)
headers = {'content-type': 'application/x-www-form-urlencoded', 'x-api-key': api_key, 'x-signature': hmac_signature_base64}
response = requests.post(url, data=payload, headers=headers)
print(response.text)
print(response.status_code, response.reason)
Body Required
-
Market for order (e.g. "USD_BTCCALL_PERP")
-
Quantity of order (e.g. 1000)
-
Whether to buy or sell. Accepted values are ["BUY","SELL"]
-
price number
Price of order (e.g. 7500). To make the order a market order, exclude this field.
-
Timestamp in milliseconds. As trading is all about timing, orders that reach the API 15 seconds or more after this timestamp will be rejected.
-
leverage number
The leverage to use for your order. If not supplied, this will be set to the minimum leverage available on the market. Only relevant for Isolated Margin users.
-
trigger_price number
An optional trigger price for your order. Your order will be triggered and sent to the matching engine once the Mark Price, Last Price or Index Price (depending on what you choose for the 'trigger_event' parameter) reaches this price. This parameter can be used to enable both stop and take profit orders. A "SELL" order with a trigger price below the current market price (when you are long) is a stop order. A "SELL" order with a trigger price above the current market price (when you are long) is a take profit order. The opposite is true when you are short.
-
time_in_force string
Time in force. Can be either "GTC" (Good Till Cancelled), "FOK" (Fill or Kill) or "IOC" (Immediate or Cancel). Default is "GTC".
-
recv_window integer(int32)
A custom time window. Order is accepted if timestamp + recv_window <= now.
-
is_test boolean
Whether the order is a test order or not. Test orders are free and are not sent to the matching engine. By submitting test orders you can ensure that your payload is valid and well-formed.
-
reduce_only boolean
Set this to true to make the order a reduce-only order. Reduce-only orders cannot increase the size of your position. They do not subtract from your balance.
-
post_only boolean
Set this to true to make the order a post-only order. Post-only orders can only match passively and will never pay taker fees.
-
icebergs integer(int32)
Number of icebergs for the order. Visible Order Quantity = Order Quantity / Icebergs. Use this to only partially hide your order.
-
oco string
One Cancels the Others. Set this to a specific string to make it cancel all other orders with the same string when filled. The string must be of size at most 5 characters.
-
trigger_event string
The price event that triggers the order. For derivatives, it can be either MARK_PRICE, INDEX_PRICE or LAST_PRICE. The default is MARK_PRICE. For spot markets, it can only be LAST_PRICE.
-
close_on_trigger boolean
Whether to submit the order as a Close on Trigger order. Close on Trigger orders cancel open reduce-only orders on the position upon being triggered in an attempt to free up margin, making them less likely to encounter insufficient balance issues. Only relevant if you have an existing position for the given market.
curl \
-X POST https://api.testnet.everstrike.io/auth/order \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d 'pair=string&qty=42.0&side=string&price=42.0×tamp=42&leverage=42.0&trigger_price=42.0&time_in_force=string&recv_window=42&is_test=true&reduce_only=true&post_only=true&hidden=true&icebergs=42&oco=string&trigger_event=string&close_on_trigger=true'
{
"code": 200,
"msg": "null",
"result": {
"order": {
"id": "849cdea0395411e98f54b395ae9c7bb6",
"pair": "USD_BTCCALL_PERP",
"side": "SELL",
"time": 1551137077642,
"type": "LIMIT",
"fills": [],
"price": 120,
"hidden": false,
"status": "ACTIVE",
"leverage": 1,
"qty_orig": 0.002,
"post_only": false,
"price_orig": 120,
"customer_id": "5f9ca5f0-380e-11e9-bf51-91a076098e19",
"reduce_only": false,
"qty_orig_usd": 0.28101585963,
"qty_remaining": 0.002,
"time_in_force": "GTC"
},
"balances": {
"BTC": {
"free": 21,
"locked": 2,
"withdrawn": 0
}
},
"position": {
"free": 1,
"size": 1,
"fills": [],
"stats": {
"lp": 3.7,
"pnl": 0,
"roe": 0,
"mark": 2.1,
"size": 1,
"equity": 1,
"margin": 1,
"bankrupt": 3.78,
"leverage": 2.82,
"notional": 0.14,
"avg_entry": 3.4,
"direction": "BUY"
},
"locked": 0,
"realized": 0
}
}
}
{
"code": 503,
"msg": "Invalid request",
"result": {}
}