🌎 This documentation is also available in the following languages: PT-BR
NodeJS library for interacting with Biscoint's API. In order to call private methods, you'll need a Biscoint verified account to generate the API key and secret.
Biscoint is a cryptocurrency marketplace that allows trading BTC and another assets in multiple exchanges with a single account.
Check out biscoint-arbitrage-bot, for it showcases the use of many of the methods in this library in an arbitrage bot application.
npm i biscoint-api-node
yarn add biscoint-api-node
Instantiate Biscoint class
import Biscoint from 'biscoint-api-node';
// configure here with your keys for private calls, public calls don't need valid keys
const bc = new Biscoint({
apiKey: 's4t0sh1n4k4m0t0',
apiSecret: 's4t0sh1n4k4m0t0',
// apiTimeout: 9000,
});
Optionally, you can uncomment the apiTimeout line to specify the request timeout in milliseconds you want. If not specified the default timeout will be 5000ms.
All methods return a Promise.
Get Biscoint ticker
bc.ticker();
Returns
{
base: 'BTC',
quote: 'BRL',
vol: 0.00155952,
low: 32061.15,
high: 32061.15,
last: 32061.15,
ask: 32088.7,
askQuoteAmountRef: 1000,
askBaseAmountRef: 0.03116362,
bid: 29961.9,
bidQuoteAmountRef: 1000,
bidBaseAmountRef: 0.03337572,
timestamp: '2019-12-10T20:22:29.172Z'
}
Get Biscoint fees
bc.fees();
Returns
{
withdrawal: {
BTC: {
rate: "0.0",
fixed: {
slow: "0.0001",
normal: "0.0002",
fast: "0.0004"
}
},
BRL: {
rate: "0.0",
fixed: {
ted: "14.90",
sameBankTransfer: "14.90"
}
}
}
}
Get Biscoint rate limit of your IP
bc.meta();
Returns
{
version: "v1",
endpoints: {
ticker: {
get: {
type: "public",
rateLimit: {
windowMs: 60000,
maxRequests: 6,
rate: "6 per 1 minute"
}
}
},
fees: {
get: {
type: "public",
rateLimit: {
windowMs: 60000,
maxRequests: 2,
rate: "2 per 1 minute"
}
}
},
meta: {
get: {
type: "public",
rateLimit: {
windowMs: 60000,
maxRequests: 2,
rate: "2 per 1 minute"
}
}
},
balance: {
get: {
type: "private",
rateLimit: {
windowMs: 60000,
maxRequests: 12,
rate: "12 per 1 minute"
}
}
},
offer: {
get: {
type: "private",
rateLimit: {
windowMs: 60000,
maxRequests: 24,
rate: "24 per 1 minute"
}
},
post: {
type: "private",
rateLimit: {
windowMs: 60000,
maxRequests: 24,
rate: "24 per 1 minute"
}
}
},
trades: {
get: {
type: "private",
rateLimit: {
windowMs: 60000,
maxRequests: 12,
rate: "12 per 1 minute"
}
}
}
}
}
Get your account balance
bc.balance();
Returns
{
BRL: 5000.00,
BTC: 0.001
}
Request a new offer for amount, and side that you specify.
bc.offer({ amount: 0.01, isQuote: false, op: "buy" });
Returns
{
offerId: "hHaJuKF2m5aD8mZn4",
base: "BTC",
quote: "BRL",
op: "buy",
isQuote: false,
baseAmount: "0.01000000",
quoteAmount: "362.69",
efPrice: "36269.00",
createdAt: "2020-01-22T22:39:16.874Z",
expiresAt: "2020-01-22T22:39:31.874Z",
apiKeyId: "BdFABxNakZyxPwnRu"
}
Confirm offer passing an orderId
bc.confirmOffer({ offerId: "5d9s8w6d12"});
Returns
{
offerId: "hHaJuKF2m5aD8mZn4",
base: "BTC",
quote: "BRL",
op: "buy",
isQuote: false,
baseAmount: "0.01000000",
quoteAmount: "362.69",
efPrice: "36269.00",
createdAt: "2020-01-22T22:39:16.874Z",
confirmedAt: "2020-01-22T22:39:16.945Z",
apiKeyId: "BdFABxNakZyxPwnRu"
}
Returns last 20 trades
bc.trades({ op: 'sell' });
Returns
[
{
"id": "D6x63B3q3Mec4tggY",
"offerId": "aX2Bkd8MseB20Axbkba",
"op": "buy",
"base": "BTC",
"quote": "BRL",
"baseAmount": "0.01000000",
"quoteAmount": "362.82",
"apiKeyId": "BdFABxNakZyxPwnRu",
"efPrice": "36282.00",
"date": "2020-01-22T23:25:02.785Z"
},
...
]
Returns last 20 trades
bc.trades({ page: 0, limit: 20, base: 'BTC' });
Returns
{
"page": 0,
"totalPages": 2,
"totalSize": 15,
"limit": 20,
"trades": [
{
"id": "D6x63B3q3Mec4tggY",
"offerId": "aX2Bkd8MseB20Axbkba",
"op": "buy",
"base": "BTC",
"quote": "BRL",
"baseAmount": "0.01000000",
"quoteAmount": "362.82",
"apiKeyId": "BdFABxNakZyxPwnRu",
"efPrice": "36282.00",
"date": "2020-01-22T23:25:02.785Z"
},
...
]
}
Simple do the following steps
API_URL='https://api.biscoint.io/' # tip: this can be null
API_KEY='s4t0sh1n4k4m0t0'
API_SECRET='s4t0sh1n4k4m0t0'
npm run test
or
yarn test
If you missed something and would like to see it here, don't be shy and create your first PR. Our recruiters are keeping an eye on those who contribute 👀.