1. Get Market Info
Query Parameters :
marketId
(Required) - The ID of the market you want information about.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getMarketInfo?marketId=66
Example Response:
Copy {
"success": true,
"message": "Fetched market info successfully",
"data": [
{
"base_decimals": 8,
"base_name": "APT/USDT",
"counter": "0",
"creator_address": "0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770",
"lot_size": "150000000",
"maintenance_margin": "250",
"market_address": "0xb0199770297ea887842223092755b91b8472832e01eba0bc55f8acb5baa7ba6a",
"market_id": "396",
"max_leverage": "20",
"max_lots": "1500000",
"min_lots": "500",
"quote_decimals": 6,
"quote_precision": 3,
"tick_size": "1"
}
]
}
Example Code to Fetch Market Information:
The following TypeScript/Node.js script demonstrates how to call the Get Market Info API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getMarketInfo';
const params = {
marketId: 'your_market_id'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getMarketInfo: ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
2. Get Wallet Account Balance
Query Parameters :
marketId
(Required) - The ID of the market you want information about.
address (Required) - The wallet address for which the account balance is being fetched.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getWalletAccountBalance?marketId=66&address=0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770
Example Response:
Copy {
"success": true,
"message": "Fetched wallet account balance successfully",
"data": 611899
}
Example Code to Fetch Wallet Account Balance Information:
The following TypeScript/Node.js script demonstrates how to call the Get Wallet Account Balance API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getWalletAccountBalance';
const params = {
marketId: 'your_market_id',
address: 'your_wallet_address'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getWalletAccountBalance: ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
3. Get Trading Account Balance
Query Parameters :
marketId
(Required) - The ID of the market you want information about.
address (Required) - The wallet address for which the account balance is being fetched.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getTradingAccountBalance?marketId=66&address=0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770
Example Response:
Copy {
"success": true,
"message": "Fetched trading account balance successfully",
"data": 1027469914
}
Example Code to Fetch Trading Account Balance Information:
The following TypeScript/Node.js script demonstrates how to call the Get Trading Account Balance API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getTradingAccountBalance';
const params = {
marketId: 'your_market_id',
address: 'your_wallet_address'
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
console.log("getTradingAccountBalance: ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
4. Deposit
Query Parameters :
amount
(Required) - The amount of the quote coin to deposit.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/deposit?amount=50000000
Example Response:
Copy {
"success": true,
"message": "Deposit payload built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_core::deposit_asset",
"functionArguments": [
50000000
],
"typeArguments": [
]
}
}
Example Code to Depsoit a quote coin:
The following TypeScript/Node.js script demonstrates how to call the Get Deposit API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/deposit';
const params = {
amount: 'your_amount'
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
5. Withdraw
Query Parameters :
marketId
(Required) - The ID of the market you want to withdraw.
amount
(Required) - The amount of the quote coin to withdraw.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/withdraw?marketId=66&amount=50000000
Example Response:
Copy {
"success": true,
"message": "Withdraw payload built successfully",
"data": {
"function": "0x1ce63c441256263ea2f45dd2d3a1e68e5843107c65c10b79c7a2d5aa2b7a4e3e::perp_market::withdraw",
"functionArguments": [
50000000
],
"typeArguments": [
]
}
}
Example Code to Depsoit a quote coin:
The following TypeScript/Node.js script demonstrates how to call the Get Withdraw API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/withdraw';
const params = {
marketId: 'your_market_id',
amount: 'your_amount'
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
6. Place Limit Order
Query Parameters :
marketId (Required) - The ID of the market where the limit order will be placed.
tradeSide (Required) - Indicates the trade side:
false
for the short side.
direction (Required) - Indicates the direction of the trade:
false
to open a position.
true
to close a position.
size (Required) - The size of the order.
price (Required) - The price at which the order is to be placed.
leverage (Required) - The leverage to be used for the order.
restriction - Specifies the type of order restriction: (Default: 0
)
0
- NO_RESTRICTION
: Optionally fill as a taker, then post to the book as a maker.
1
- FILL_OR_ABORT
: Abort if any size posts as a maker (only fill).
3
- POST_OR_ABORT
: Abort if any size fills as a taker (only post).
takeProfit - The take profit value can be either a number or undefined
if not provided.
stopLoss - The stop loss value can be either a number or undefined
if not provided.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/limitOrder/?marketId=66&tradeSide=true&direction=false&size=10000&price=3000&leverage=3
Example Response:
Copy {
"success": true,
"message": "Limit Order payload has been built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_scripts::place_limit_order_external",
"functionArguments": [
301,
true,
false,
10000,
3000,
3,
0,
10,
1
],
"typeArguments": []
}
}
Example Code to Place a limit order:
The following TypeScript/Node.js script demonstrates how to call the Get Place Limit Order API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/limitOrder';
const params = {
marketId: 'your_market_id',
tradeSide: 'your_trade_side',
direction: 'your_direction',
size: 'your_size',
price: 'your_price',
leverage: 'your_leverage',
restriction: 'your_restriction', //(Optional, Default: 0)
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
7. Place Market Order
Query Parameters :
marketId (Required) - The ID of the market where the limit order will be placed.
tradeSide (Required) - Indicates the trade side:
false
for the short side.
direction (Required) - Indicates the direction of the trade:
false
to open a position.
true
to close a position.
size (Required) - The size of the order.
leverage (Required) - The leverage to be used for the order.
takeProfit - The take profit value can be either a number or undefined
if not provided.
stopLoss - The stop loss value can be either a number or undefined
if not provided.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/marketOrder?marketId=66&tradeSide=false&direction=true&size=1000&leverage=20
Example Response:
Copy {
"success": true,
"message": "Market Order payload has been built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_scripts::place_market_order_external",
"functionArguments": [
301,
false,
true,
1000,
20,
0,
0
],
"typeArguments": []
}
}
Example Code to Place a market order:
The following TypeScript/Node.js script demonstrates how to call the Get Place Market Order API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/marketOrder';
const params = {
marketId: 'your_market_id',
tradeSide: 'your_trade_side',
direction: 'your_direction',
size: 'your_size',
leverage: 'your_leverage',
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
8. Cancel Multiple Orders
Request Body :
marketId : The ID of the market for which the orders will be canceled.
orderIds : A list of order IDs to cancel.
cancelTradeSides: The sides of the orders to cancel (true for long, false for short).
Example Request:
Copy {
"marketId": 66,
"orderIds": ["1077898597726583798162207", "1077880153515406921884445"],
"cancelTradeSides": [true, false]
}
Example Response:
Copy {
"success": true,
"message": "Cancel Multiple Orders payload has been built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_scripts::cancel_multiple_orders_external",
"functionArguments": [
17,
[
"37114852031954082077144",
"37133298353772376889716"
],
[
true,
false
]
],
"typeArguments": []
}
}
Example Code to Cancel multiple orders:
The following TypeScript/Node.js script demonstrates how to call the Post Cancel Multiple Orders API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/cancelMultipleOrders';
const params = {
marketId: 'your_market_id',
orderIds: ['your_order_ids'],
tradeSides: ['your_trade_sides']
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
8. Place Multiple Orders
Request Body :
marketId (Required) - The ID of the market where the orders will be placed.
orderTypes (Required) - An array of order types for each order:
tradeSides (Required) - An array indicating the trade sides for each order:
false for short positions.
directions (Required) - An array indicating the direction of each trade:
false to open a position.
true to close a position.
sizes (Required) - An array of sizes for each order.
leverages (Required) - An array of leverages for each order.
prices (Required) - An array of prices at which each order is to be placed.
restrictions (Optional) - An array specifying the type of order restriction for each order (Default: 0):
0 - NO_RESTRICTION: Optionally fill as a taker, then post to the book as a maker.
1 - FILL_OR_ABORT: Abort if any size posts as a maker (only fill).
3 - POST_OR_ABORT: Abort if any size fills as a taker (only post).
takeProfit - The take profit value can be either a number or undefined
if not provided.
stopLoss - The stop loss value can be either a number or undefined
if not provided.
Example Request:
Copy {
"marketId": 66,
"orderTypes": [true, true],
"tradeSides": [true, true],
"directions": [true, true],
"sizes": [1000, 1000],
"prices": [1000, 1000],
"leverages": [2, 2]
}
Example Response:
Copy {
"success": true,
"message": "Place multiple orders payload built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_scripts::place_multiple_orders_external",
"functionArguments": [
47,
[true, true],
[true, false],
[true, false],
[1000, 2000],
[4000, 6000],
[2, 3],
[0, 0],
[11000, 13000],
[15000, 16000]
],
"typeArguments": []
}
}
Example Code to Place a multiple orders:
The following TypeScript/Node.js script demonstrates how to call the Get Place Multiple Orders API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/placeMultipleOrders';
const params = {
marketId: 'your_market_id',
orderTypes: ['your_order_types'],
tradeSides: ['your_trade_sides'],
directions: ['your_directions'],
sizes: ['your_sizes'],
prices: ['your_prices'],
leverage: ['your_leverages']
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
9. Cancel and Place Multiple Orders
Request Body :
marketId (Required) - The ID of the market where the orders will be placed.
orderIds (Required) - An array of strings representing the IDs of the orders to be canceled.
cancelTradeSides (Required) - An array indicating the sides of the orders being canceled:
orderTypes (Required) - An array of order types for each order:
orderTradeSides (Required) - An array indicating the trade sides for each order:
false for short positions.
directions (Required) - An array indicating the direction of each trade:
false to open a position.
true to close a position.
sizes (Required) - An array of sizes for each order.
leverages (Required) - An array of leverages for each order.
prices (Required) - An array of prices at which each order is to be placed.
restrictions (Optional) - An array specifying the type of order restriction for each order (Default: 0):
0 - NO_RESTRICTION: Optionally fill as a taker, then post to the book as a maker.
1 - FILL_OR_ABORT: Abort if any size posts as a maker (only fill).
3 - POST_OR_ABORT: Abort if any size fills as a taker (only post).
takeProfit - The take profit value can be either a number or undefined
if not provided.
stopLoss - The stop loss value can be either a number or undefined
if not provided.
Example Request:
Copy {
"marketId": 66,
"orderIds": ["23434565434567", "454345665456"],
"cancelTradeSides": [true, true],
"orderTypes": [true, true],
"orderTradeSides": [true, false],
"directions": [true, true],
"sizes": [1000, 2000],
"prices": [5000, 6000],
"leverages": [2, 2]
}
Example Response:
Copy {
"success": true,
"message": "Cancel and place multiple Orders payload has been built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_scripts::cancel_and_place_multiple_orders_external",
"functionArguments": [
47,
"0xc0de11113b427d35ece1d8991865a941c0578b0f349acabbe9753863c24109ff",
[
"37114852031954082077144",
"37133298353772376889716"
],
[true, false],
[true, false],
[true, false],
[1000, 2000],
[4000, 6000],
[2, 3],
[0, 0],
[11000, 13000],
[15000, 16000]
],
"typeArguments": []
}
}
Example Code to cancel and Place a multiple orders:
The following TypeScript/Node.js script demonstrates how to call the Get Cancel And Place Multiple Orders API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/cancelAndPlaceMultipleOrders';
const params = {
marketId: 'your_market_id',
orderIds: ['your_order_ids'],
cancelTradeSides: ['your_cancel_trade_sides'],
orderTypes: ['your_order_types'],
tradeSides: ['your_trade_sides'],
directions: ['your_directions'],
sizes: ['your_sizes'],
prices: ['your_prices'],
leverage: ['your_leverages']
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
10. Get Open Orders
Query Parameters :
address (Required) - The wallet address to retrieve open orders for.
marketId (Required) - The ID of the market to filter open orders.
Copy Note : Trade Types Explanation:
OPEN_LONG (1): Opens a new long position.
OPEN_SHORT (2): Opens a new short position.
INCREASE_LONG (3): Increases the size of an existing long position.
INCREASE_SHORT (4): Increases the size of an existing short position.
DECREASE_LONG (5): Reduces the size of an existing long position.
DECREASE_SHORT (6): Reduces the size of an existing short position.
CLOSE_LONG (7): Closes an existing long position.
CLOSE_SHORT (8): Closes an existing short position.
Note: Order Side Explanation:
orderSide: false --> Bids (buy)
orderSide: true --> Asks (sell)
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/openOrders?address=0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770&marketId=66
Example Response:
Copy {
"success": true,
"message": "Current open orders data fetched successfully",
"data": [
{
"marketOrderId": "92233861123215989592",
"orderSide": false,
"marketPrice": "7000",
"marketSize": "100000000",
"leverage": 2,
"tradeType": 1,
"timestamp": "2024-12-31T04:21:27.892309+00:00"
},
{
"marketOrderId": "110680745925823961945",
"orderSide": false,
"marketPrice": "7001",
"marketSize": "200000000",
"leverage": 2,
"tradeType": 3,
"timestamp": "2024-12-31T04:21:27.892309+00:00"
},
{
"marketOrderId": "147574374827911291688",
"orderSide": false,
"marketPrice": "9000",
"marketSize": "100000000",
"leverage": 2,
"tradeType": 3,
"timestamp": "2024-12-31T12:25:19.368272+00:00"
}
]
}
Example Code to Fetch Open Orders:
The following TypeScript/Node.js script demonstrates how to call the Get Open Orders API using the axios
library.
11. Get Order History
Query Parameters :
address (Required) - The wallet address to retrieve the order history for.
type (Required) - The type of orders to fetch. Options include:
'limit'
for limit orders.
'market'
for market orders.
'all'
for both limit and market orders.
marketId (Required) - The ID of the market to filter the order history.
offset (Optional) - The number of records to skip for pagination (default is 0
if not provided).
limit (Optional) - The maximum number of records to retrieve (default is 10
if not provided).
order (Optional) - The sorting order for the results. Options:
'asc'
for ascending order.
'desc'
for descending order.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/orderHistory?address=0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770&type=all&marketId=66
Example Response:
Copy {
"status": true,
"message": "Fetched order history successfully",
"data": [
{
"market_id": 66,
"order_id": "15308344164217124470915072",
"created_at": "2024-11-20T11:54:54.672164+00:00",
"last_updated_at": "2024-11-20T11:54:54.672164+00:00",
"integrator": "0xfb7e14963ceda75902f2767e38f95305646de7849b96c433b8a8ec31b008aaa1",
"total_filled": 1000,
"remaining_size": 0,
"order_status": "closed",
"order_type": "market",
"user": "0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770",
"direction": "sell",
"price": 0,
"average_execution_price": 12792,
"custodian_id": 28,
"self_match_behavior": 0,
"restriction": 0,
"last_increase_stamp": null,
"min_base": null,
"max_base": null,
"min_quote": null,
"max_quote": null,
"total_fees_paid_in_quote_subunits": 6396,
"leverage": 20,
"trade_type": 11,
"timestamp": "1732103694"
},
{
"market_id": 66,
"order_id": "15308325717473050761363456",
"created_at": "2024-11-20T11:54:45.957059+00:00",
"last_updated_at": "2024-11-20T11:54:45.957059+00:00",
"integrator": "0xee820ab02631dd1a195d3c53fa64f0a8f455dbb9261388e141c3bd3bd3c08363",
"total_filled": 1000,
"remaining_size": 0,
"order_status": "closed",
"order_type": "market",
"user": "0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770",
"direction": "buy",
"price": 0,
"average_execution_price": 12813,
"custodian_id": 28,
"self_match_behavior": 0,
"restriction": 0,
"last_increase_stamp": null,
"min_base": null,
"max_base": null,
"min_quote": null,
"max_quote": null,
"total_fees_paid_in_quote_subunits": 6406,
"leverage": 20,
"trade_type": 3,
"timestamp": "1732103685"
}
]
}
Example Code to Fetch Order History:
The following TypeScript/Node.js script demonstrates how to call the Get Order History API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/orderHistory';
const params = {
address: 'your_wallet_address',
type: 'your_type', // all
marketId: 'your_market_id'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
const getOrderHistory = res.data;
console.log("getOrderHistory : ", getOrderHistory);
}
main().catch(error => {
console.error('An error occurred:', error);
});
12. Get Open Position
Query Parameters :
address (Required) - The wallet address of the user to view positions for.
marketId (Required) - The ID of the market to filter the positions.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/viewPositions?marketId=66&address=0x2eda5777ed2bf68cbcc67359dd00ae5fa73b1d5fa160b7c3aeb42d748d485387
Example Response:
Copy {
"success": true,
"message": "View position data fetched successfully",
"data": {
"longViewData": {
"close_size": "0",
"close_taker_fee": "0",
"collateral": "1500100000000000",
"entry_price": "900000000000",
"exit_price": "0",
"filled_close_size": "0",
"filled_open_size": "100000000",
"funding_amount": {},
"funding_updated_at": "0",
"leverage": 2,
"limit_orders": [],
"liquidation_price": "4615",
"open_size": "400000000",
"open_taker_fee": "0",
"position_value": "30002000",
"quote_contribution": "1500100000000000",
"stop_loss": "0",
"take_profit": "0",
"trade_id": "110680464442257310092"
},
"shortViewData": {
"base_contribution": "0",
"close_size": "0",
"close_taker_fee": "0",
"collateral": "0",
"entry_price": "0",
"exit_price": "0",
"filled_close_size": "0",
"filled_open_size": "0",
"funding_amount": {},
"funding_updated_at": "0",
"leverage": 0,
"limit_orders": [],
"liquidation_price": "0",
"open_size": "0",
"open_taker_fee": "0",
"position_value": "0",
"stop_loss": "0",
"take_profit": "0",
"trade_id": "0"
},
"tradingBalance": "74999000"
}
}
Example Code to Fetch Open Position:
The following TypeScript/Node.js script demonstrates how to call the Get Open Position API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/viewPositions';
const params = {
marketId: 'your_market_id',
address: 'your_wallet_address'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getOpenPosition : ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
12. Get All Trades
Query Parameters :
marketId (Required) - The ID of the market to retrieve all trades information.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getAllTrades?marketId=66
Example Response:
Copy {
"success": true,
"message": "Recent trades fetched successfully",
"data": [
{
"txn_version": 6297687196,
"event_idx": 5,
"emit_address": "0x2eda5777ed2bf68cbcc67359dd00ae5fa73b1d5fa160b7c3aeb42d748d485387",
"time": "2024-11-20T20:33:38.600241+00:00",
"maker_address": "0x2eda5777ed2bf68cbcc67359dd00ae5fa73b1d5fa160b7c3aeb42d748d485387",
"maker_custodian_id": 28,
"maker_order_id": "15951655917465922493754983",
"maker_side": true,
"market_id": 66,
"price": 11879,
"sequence_number_for_trade": 0,
"size": 10000,
"taker_address": "0x13eb7ea6b62c6cd791b5c4e0e2ef1dfbe59d1cf4823929343a273274c288bc8a",
"taker_custodian_id": 28,
"taker_order_id": "15951748150764039921729536",
"taker_quote_fees_paid": 59395
},
{
"txn_version": 6297687196,
"event_idx": 4,
"emit_address": "0x13eb7ea6b62c6cd791b5c4e0e2ef1dfbe59d1cf4823929343a273274c288bc8a",
"time": "2024-11-20T20:33:38.600241+00:00",
"maker_address": "0x2eda5777ed2bf68cbcc67359dd00ae5fa73b1d5fa160b7c3aeb42d748d485387",
"maker_custodian_id": 28,
"maker_order_id": "15951655917465922493754983",
"maker_side": true,
"market_id": 66,
"price": 11879,
"sequence_number_for_trade": 0,
"size": 10000,
"taker_address": "0x13eb7ea6b62c6cd791b5c4e0e2ef1dfbe59d1cf4823929343a273274c288bc8a",
"taker_custodian_id": 28,
"taker_order_id": "15951748150764039921729536",
"taker_quote_fees_paid": 59395
}
]
}
Example Code to Fetch Open Position:
The following TypeScript/Node.js script demonstrates how to call the Get Open Position API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getAllTrades';
const params = {
marketId: 'your_market_id'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
const getAllTrades = res.data;
console.log("getAllTrades : ", getAllTrades);
}
main().catch(error => {
console.error('An error occurred:', error);
});
13. Get Order Status By Order Id
Query Parameters :
marketId (Required) - The ID of the market associated with the order.
orderId (Required) - The unique identifier of the order to retrieve its status.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getOrderStatusByOrderId?marketId=66&orderId=15308325717473050761363456
Example Response:
Copy {
"status": true,
"message": "Fetched order status for a given order Id successfully",
"data": {
"market_id": 66,
"order_id": "15308325717473050761363456",
"created_at": "2024-11-20T11:54:45.957059+00:00",
"last_updated_at": "2024-11-20T11:54:45.957059+00:00",
"integrator": "0xee820ab02631dd1a195d3c53fa64f0a8f455dbb9261388e141c3bd3bd3c08363",
"total_filled": 1000,
"remaining_size": 0,
"order_status": "closed",
"order_type": "market",
"user": "0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770",
"direction": "buy",
"price": 0,
"average_execution_price": 12813,
"custodian_id": 28,
"self_match_behavior": 0,
"restriction": 0,
"last_increase_stamp": null,
"min_base": null,
"max_base": null,
"min_quote": null,
"max_quote": null,
"total_fees_paid_in_quote_subunits": 6406
}
}
Example Code to Fetch Order Status B Order Id:
The following TypeScript/Node.js script demonstrates how to call the Get Order Status By Order Id API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getOrderStatusByOrderId';
const params = {
marketId: 'your_market_id',
orderId: 'your_order_id'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getOrderStatusByOrderId : ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
14. Get Fills
Query Parameters :
marketId (Required) - The ID of the market for which fills are retrieved.
address (Optional) - The address of the user to filter fills (if applicable).
from (Required) - The start time of the range in ISO 8601 format (e.g., 2024-11-21T00:00:00Z
).
to (Required) - The end time of the range in ISO 8601 format (e.g., 2024-11-21T23:59:59Z
).
orderId (Required) - The unique identifier of the order to retrieve its status.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getFills?marketId=66&address=0x3a6b332c7889784fe57ea61f507b5056e386db8f56c6323b4d898485f468f0c2&from=2024-11-20T00:00:00Z&to=2024-11-21T23:59:59Z
Example Response:
Copy {
"success": true,
"message": "Fetched fill trades for a given time range Successfully",
"data": [
{
"txn_version": 6296434935,
"event_idx": 1,
"emit_address": "0x3a6b332c7889784fe57ea61f507b5056e386db8f56c6323b4d898485f468f0c2",
"time": "2024-11-20T19:23:14.67535+00:00",
"maker_address": "0x2eda5777ed2bf68cbcc67359dd00ae5fa73b1d5fa160b7c3aeb42d748d485387",
"maker_custodian_id": 28,
"maker_order_id": "15891335065048614061485282",
"maker_side": true,
"market_id": 66,
"price": 11490,
"sequence_number_for_trade": 0,
"size": 1000,
"taker_address": "0x3a6b332c7889784fe57ea61f507b5056e386db8f56c6323b4d898485f468f0c2",
"taker_custodian_id": 28,
"taker_order_id": "15891427297643009687945216",
"taker_quote_fees_paid": 5745
},
{
"txn_version": 6295302625,
"event_idx": 4,
"emit_address": "0x3a6b332c7889784fe57ea61f507b5056e386db8f56c6323b4d898485f468f0c2",
"time": "2024-11-20T18:19:35.70863+00:00",
"maker_address": "0x2eda5777ed2bf68cbcc67359dd00ae5fa73b1d5fa160b7c3aeb42d748d485387",
"maker_custodian_id": 28,
"maker_order_id": "15812401447297883953966476",
"maker_side": false,
"market_id": 66,
"price": 11660,
"sequence_number_for_trade": 0,
"size": 1000,
"taker_address": "0x3a6b332c7889784fe57ea61f507b5056e386db8f56c6323b4d898485f468f0c2",
"taker_custodian_id": 28,
"taker_order_id": "15812549019983827645235200",
"taker_quote_fees_paid": 5830
}
]
}
Example Code to Fetch Order Status B Order IdFills Data:
The following TypeScript/Node.js script demonstrates how to call the Get Fills Data API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getFills';
const params = {
marketId: 'your_market_id',
address: 'your_address',
from: 'your_from_time',
to: 'your_to_time'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getFillsData : ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
14. Get Market Price
Query Parameters :
marketId (Required) - The ID of the market for which the price information is being retrieved.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getMarketPrice?marketId=66
Example Response:
Copy {
"success": true,
"message": "Fetched Market Price Successfully",
"data": {
"bestAskPrice": 6000,
"bestBidPrice": 9000
}
}
Example Code to Fetch Market Price:
The following TypeScript/Node.js script demonstrates how to call the Get Market Price API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getMarketPrice';
const params = {
marketId: 'your_market_id'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getMarketPrice : ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
15. Get Last Execution Price
Query Parameters :
marketId (Required) - The ID of the market for which the last execution price information is being retrieved.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getLastPlacedPrice?marketId=66
Example Response:
Copy {
"success": true,
"message": "Fetched last execution price Successfully",
"data": {
"tickPrice": 7074,
"usdtPrice": 7.074
}
}
Example Code to Fetch Last Execution Price:
The following TypeScript/Node.js script demonstrates how to call the Get Last Execution Price API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getLastPlacedPrice';
const params = {
marketId: 'your_market_id'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getLastExecutionPrice : ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
16. Get Open Order Ids
Query Parameters :
address (Required) - The address associated with the orders.
marketId (Required) - The ID of the market for which open order IDs are being retrieved.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/openOrderIds?marketId=66&address=0x3a6b332c7889784fe57ea61f507b5056e386db8f56c6323b4d898485f468f0c2
Example Response:
Copy {
"success": true,
"message": "Open order IDs fetched successfully",
"data": [
"92233861123215989592",
"110680745925823961945",
"147574374827911291688"
]
}
Example Code to Fetch Open Order Ids:
The following TypeScript/Node.js script demonstrates how to call the Get Open Order Ids API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/openOrderIds';
const params = {
address: 'your_wallet_address',
marketId: 'your_market_id'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getOpenOrderIds : ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
17. Update Take Profit
Query Parameters :
marketId (Required) - The ID of the market for which the take profit values will be updated.
tradeSide (Required) - The trade side:
false
for the short side.
newTakeProfitPrice (Required) - The new take profit price to be set for the trade.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/updateTp?marketId=66&tradeSide=true&newTakeProfitPrice=6000
Example Response:
Copy {
"success": true,
"message": "Update take profit payload built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_core::UpdateTakeProfitEvent",
"functionArguments": [
17,
true,
5000
],
"typeArguments": [""]
}
}
Example Code to Update take profit price:
The following TypeScript/Node.js script demonstrates how to call the Get Update Take Profit Price API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/updateTp';
const params = {
marketId: 'your_market_id',
tradeSide: 'your_trade_side',
newTakeProfitPrice: 'your_tp_price'
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});
18. Get Account Aptos Balance
marketId (Required) - The ID of the market for which the account's balance is being retrieved.
address (Required) - The address of the account whose balance will be
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/getAccountAptBalance?marketId=66&address=0x4d6dc68e391e86991e58ab4d548b7e92872430d1f51bc666fe0c206bad7ff770
Example Response:
Copy {
"success": true,
"message": "Fetched Account Apt Balance Successfully",
"data": 82344617
}
Example Code to Fetch Wallet Account Aptos Balance Information:
The following TypeScript/Node.js script demonstrates how to call the Get Wallet Account Aptos Balance API using the axios
library.
Copy import axios from "axios";
async function main(): Promise<void> {
const baseURL = 'https://perps-tradeapi.kanalabs.io/getAccountAptBalance';
const params = {
marketId: 'your_market_id',
address: 'your_wallet_address'
};
const res = await axios.get(baseURL, {
params,
headers: {
'x-api-key': process.env.API_KEY,
},
});
console.log("getWalletAccountAptosBalance : ", res);
}
main().catch(error => {
console.error('An error occurred:', error);
});
19. Update Stop Loss
Query Parameters :
marketId (Required) - The ID of the market for which the take profit values will be updated.
tradeSide (Required) - The trade side:
false
for the short side.
newStopLossPrice (Required) - The new stop loss price to be set for the trade.
Example Request:
Copy GET https://perps-tradeapi.kanalabs.io/updateSl?marketId=66&tradeSide=true&newStopLossPrice=6000
Example Response:
Copy {
"success": true,
"message": "Update stop loss payload built successfully",
"data": {
"function": "0xa1dc5fe31b275707ead4602c7aaf46e193c4c684b7420c389885702e86d80007::perpetual_core::UpdateStopLossEvent",
"functionArguments": [
17,
true,
3000
],
"typeArguments": [""]
}
}
Example Code to Update stop loss price:
The following TypeScript/Node.js script demonstrates how to call the Get Update Stop Loss Price API using the axios
library.
Copy import { AptosConfig, Aptos, Network, Account, Ed25519PrivateKey } from "@aptos-labs/ts-sdk";
import axios from "axios";
async function main(): Promise<void> {
const config = new AptosConfig({ network: Network.TESTNET });
const aptos = new Aptos(config);
const formattedPrivateKey = PrivateKey.formatPrivateKey(
process.env.APTOS_PRIVATEKEY || '',
'ed25519' as PrivateKeyVariants
);
const account = Account.fromPrivateKey({
privateKey: new Ed25519PrivateKey(formattedPrivateKey),
});
const baseURL = 'https://perps-tradeapi.kanalabs.io/updateSl';
const params = {
marketId: 'your_market_id',
tradeSide: 'your_trade_side',
newStopLossPrice: 'your_sl_price'
};
const res = await axios.get(baseURL, {
params, headers: {
'x-api-key': "your_api_key",
},
});
const payloadData = res.data;
const transactionPayload = await aptos.transaction.build.simple({
sender: account.accountAddress,
data: payloadData
});
const committedTxn = await aptos.transaction.signAndSubmitTransaction({
transaction: transactionPayload,
signer: account,
});
await aptos.waitForTransaction({
transactionHash: committedTxn.hash,
});
}
main().catch(error => {
console.error('An error occurred:', error);
});