Walkthrough: Limit Order APIs
Limit Order APIs by Fuze offer you a simple and straightforward way to create a digital asset order book experience for your users. As you’ll see, you can deploy a fully-functional order book app using just 4 API requests.
There is no call to fetch the orderbook depth as the orderbook provided by us is a dark venue to facilitate large transactions.
Create a User
All transactions on Fuze are associated with an orgUserId
. This can be any string that uniquely identifies your users within your systems. It can be a user name, or even a UUID
. A ledger for every orgUserId
is maintained by Fuze, and the balances can be queried at any point.
In the example request below, we’ve passed the orgUserId
barbara_allen_2
POST https://staging.api.fuze.finance/api/v1/user/create HTTP/1.1
X-SIGNATURE: <>
X-TIMESTAMP: <>
X-API-KEY: <>
User-Agent: PostmanRuntime/7.32.2
Accept: */*
Postman-Token: <>
Host: staging.api.fuze.finance
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 100
{
"orgUserId": "barbara_allen_2",
"userType": "CONSUMER",
"kyc": true,
"tnc": true
}
A successful response will look as follows:
"code": 200,
"data": {
"orgUserId": "barbara_allen_2",
"orgId": 10,
"tnc": true,
"kyc": true,
"userType": "CONSUMER",
"userStatus": "ACTIVE"
},
"error": null
}
You can also check balances of this barbara_allen_2
using the endpoint below.
POST https://staging.api.fuze.finance/api/v1/user/balance/ HTTP/1.1
X-SIGNATURE: <>
X-TIMESTAMP: <>
X-API-KEY: <>
User-Agent: PostmanRuntime/7.32.2
Accept: */*
Postman-Token: <>
Host: staging.api.fuze.finance
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
{
"orgUserId": "barbara_allen_2",
}
Since this is a user that was just created, there are currently no balances against this user.
{
"code": 200,
"data": {
"balance": []
},
"error": null
}
Place an order
You can now place orders against the orgUserId
we just created.
To place an order, you will need to pass the orgUserId
, along with the symbol
, quantity
, price
, type
and the operation
orgUserId
: The user.symbol
: The currency pair you want to trade.quantity
: The amount of asset to buy or sell.price
: The limit price for the asset.type
:LIMIT
for limit orders.kind
: One ofGOOD_TILL_CANCEL
,GOOD_TILL_DAY
, orGOOD_TILL_WEEK
.operations
: BUY or SELLclientOrderId
: Optional idempotency key which ensures the same order is not placed twice.
So if you want to buy 0.01 BTC at a price lower than equal to 5000 for barbara_allen_2, you pass the request below:
POST https://staging.api.fuze.finance/api/v1/trading/ HTTP/1.1
X-SIGNATURE: <>
X-TIMESTAMP: <>
X-API-KEY: <>
User-Agent: PostmanRuntime/7.32.2
Accept: */*
Postman-Token: <>
Host: staging.api.fuze.finance
Accept-Encoding: gzip, deflate, br
Content-Length: 75
{
"orgUserId": "barbara_allen_2",
"symbol": "BTC_USD",
"operation": "BUY",
"quantity": 0.01
"price": 5000,
"type": "LIMIT",
"kind": "GOOD_TILL_CANCEL",
"clientOrderId": "5468bbb7-5e5f-425c-a6eb-b89e19a0298a",
}
A successful response will contain an id
which can be used to query the status of the order later.
{
"code": 200,
"data": {
"id": 107,
"clientOrderId": "5468bbb7-5e5f-425c-a6eb-b89e19a0298a",
"orgId": 28,
"orgUserId": "barbara_allen_2",
"symbol": "BTC_USD",
"side": "BUY",
"quantity": 0.01,
"price": 5000,
"type": "LIMIT",
"rejectionReason": null,
"filled": 0
},
"error": null
}
Limit Orders will be executed when a corresponding match is found. You can set up a web hook that will notify you about order lifecycle events like OPEN
, COMPLETED
, REJECTED
, CANCELLED
and partial fills. We’ve covered more details about our web hooks here.
To check the status of the order, using REST, use the id
obtained while creating the order:
GET https://staging.api.fuze.finance/api/v1/trading/orders/107 HTTP/1.1
X-SIGNATURE: <>
X-TIMESTAMP: <>
X-API-KEY: <>
User-Agent: PostmanRuntime/7.32.2
Accept: */*
Postman-Token: <>
Host: staging.api.fuze.finance
Accept-Encoding: gzip, deflate, br
{
"code": 200,
"data": {
"id": 107,
"clientOrderId": "5468bbb7-5e5f-425c-a6eb-b89e19a0298a",
"orgId": 28,
"orgUserId": "barbara_allen_2",
"symbol": "BTC_USD",
"price": 5000,
"averagePrice": 26749.08,
"side": "BUY",
"quantity": 0.01,
"quoteQuantity": 0,
"filled": 0.005,
"status": "OPEN",
"rejectionReason": null,
"createdAt": "2023-06-08T07:53:11.688Z",
"updatedAt": "2023-06-08T07:53:12.658Z"
},
"error": null
}
Order Kinds
We support three kinds of orders:
GOOD_TILL_CANCEL
: The order will remain open until it is either filled or cancelled. This is the default kind of order.GOOD_TILL_DAY
: The order will remain open until the end of the current trading day.GOOD_TILL_WEEK
: The order will remain open until the end of the current trading week.GOOD_TILL_DATE
: The order will remain open until the specified date inYYYY-MM-DD
format.
Note, all cancellations happen at midnight local time of the exchange. If the local instance is GST, then the cancellation will happen at midnight GST.
Cancel Order
Limit Orders are placed with a GOOD_TILL_CANCEL
flag. You can request the cancellation of an order to ensure it not
longer is considered for further matching using the below API.
POST https://staging.api.fuze.finance/api/v1/trading/cancel HTTP/1.1
X-SIGNATURE: <>
X-TIMESTAMP: <>
X-API-KEY: <>
User-Agent: PostmanRuntime/7.32.2
Accept: */*
Postman-Token: <>
Host: staging.api.fuze.finance
Accept-Encoding: gzip, deflate, br
{
"code": 200,
"data": {
"orgUserId": "barbara_allen_2",
"orderId": 107
},
"error": null
}
{
"code": 200,
"data": {
"id": 107,
"clientOrderId": "5468bbb7-5e5f-425c-a6eb-b89e19a0298a",
"orgId": 28,
"orgUserId": "barbara_allen_2",
"symbol": "BTC_USD",
"price": 5000,
"averagePrice": 26749.08,
"side": "BUY",
"quantity": 0.01,
"quoteQuantity": 0,
"filled": 0.005,
"status": "CANCELLED",
"rejectionReason": null,
"createdAt": "2023-06-08T07:53:11.688Z",
"updatedAt": "2023-06-08T07:53:12.658Z"
},
"error": null
}
View Portfolio
You can now fetch the current holdings of a user by passing the orgUserId
in the endpoint below.
POST https://staging.api.fuze.finance/api/v1/user/holdings/ HTTP/1.1
X-SIGNATURE: <>
X-TIMESTAMP: <>
X-API-KEY: <>
User-Agent: PostmanRuntime/7.32.2
Accept: */*
Postman-Token: <>
Host: staging.api.fuze.finance
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
{
"orgUserId": "barbara_allen_2",
}
In the response, you will see all the users’ holdings.
{
"code": 200,
"data": [
{
"asset": "BTC",
"quantity": 0.01,
"currency": "USD",
"message": null
}
],
"error": null
}
View Transaction History
You can also fetch individual transaction details by passing the orgUserId
in the endpoint below.
POST https://staging.api.fuze.finance/api/v1/trading/orders/ HTTP/1.1
X-SIGNATURE: <>
X-TIMESTAMP: <>
X-API-KEY: <>
User-Agent: PostmanRuntime/7.32.2
Accept: */*
Postman-Token: <>
Host: staging.api.fuze.finance
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
{
"orgUserId": "barbara_allen_2",
}
In the response, you will get a list of all transactions made by a user. You can use this data to create a transaction history view for your users.
{
"code": 200,
"data": [
{
"id": 105,
"orgId": 28,
"orgUserId": "barbara_allen_2",
"symbol": "ETH_USD",
"price": 0,
"averagePrice": 0,
"side": "BUY",
"quantity": 0.01,
"filled": 0,
"status": "REJECTED",
"rejectionReason": "ETH is disabled for trading",
"createdAt": "2023-06-08T07:51:32.051Z",
"updatedAt": "2023-06-08T07:51:32.447Z"
},
{
"id": 107,
"orgId": 28,
"orgUserId": "barbara_allen_2",
"symbol": "BTC_USD",
"price": 0,
"averagePrice": 26749.08,
"side": "BUY",
"quantity": 0.01,
"filled": 0.01,
"status": "COMPLETED",
"rejectionReason": null,
"createdAt": "2023-06-08T07:53:11.688Z",
"updatedAt": "2023-06-08T07:53:12.658Z"
}
],
"error": null
}