Documentação API
Acesso Rápido:
DOCUMENTAÇÃO DETALHADA
Para visualizar a documentação com mais informações, acesse:
https://apidocs.bitpreco.com - Nela você terá acesso a uma versão estendida, com mais detalhes e informações adicionais.
Api de dados
Como funciona:
Nosso site fornece APIs que possibilitam os usuários conseguir
informações atualizadas sobre os principais dados das criptomoedas em nossa plataforma.
API é um endereço de internet onde você pode receber dados via requisição HTTP GET. O retorno é em formato
JSON.
A Bitypreço possui 3 endpoints para acesso:
Ticker
Para ver as informações de uma moeda específica, digite o link abaixo, substituindo BTC pelo ticker da moeda que desejar https://api.bitpreco.com/btc-brl/ticker |
---|
Retornará um JSON com os campos |
Exemplo de retorno:
{
"last":26353.32,
"high":26636.3,
"low":26162.93,
"vol":0.19396095,
"var":-1.78,
"timestamp":2018-09-11 22:17:26 }
|
Acesse as informações de todas as criptomoedas da plataforma através do link: https://api.bitpreco.com/all-brl/ticker |
Orderbook
https://api.bitpreco.com/btc-brl/orderbook |
---|
Retornará um JSON com os campos |
([{volume disponível}, {preço unitário em Reais}, {id da ordem}]) .
([{volume disponível}, {preço unitário em Reais}, {id da ordem}]) .
Exemplo de retorno:
{
|
Trades
https://api.bitpreco.com/btc-brl/trades |
---|
Retornará um JSON com os campos |
Exemplo de retorno:
[{"type":"BUY", "amount":0.0018522, "timestamp":"2018-09-12 17:20:38", "price":26313.85},
{"type":"SELL", "amount":0.01126283, "timestamp":"2018-09-11 22:18:18", "price":26636.3}]
|
Api de negociações
Como funciona:
A API de Negociações da Bitypreço permite que você automatize seus processos de compra e venda
de criptomoedas, e ainda aproveite dos descontos existentes na plataforma para aumentar a
rentabilidade de suas negociações ou arbitragens.
- A API permite no máximo 30 acessos por minuto, somando acessos da API de negociações e
pública.
O endpoint de acesso a API RESTFull é
https://api.bitpreco.com/v1/trading/{cmd}
Este endpoint, assim como todos os dados que trafegam no mesmo, é criptografado por SSL
Toda requisição deve ser feita pelo método POST e deve incluir o valor de ‘auth_token’, que
nada mais é que sua chave de acesso, composta pela concatenação das strings que representam
sua “assinatura” e “chave da api”. Você deve solicitar estas chaves dentro da própria
plataforma.
Veja exemplo
Você receberá por email:
"ABg3MTIxOTYzOQtrDtKNGae9YG3NjNHK0ZFVkY1UWVCaCtRQXYvWkIxRlAvSlRSV"
“ApVdlRUCddOd3p0RSt6VExvN3NqZlhIcUcxZWJpclRpSEpWSQ”
E seu token de acesso será:
auth_token = signature+api_key; (strings concatenadas)
Veja abaixo os métodos existentes na API de negociações:
BALANCE
Descrição: Devolve o balanço atual de sua conta |
---|
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/balance \
--header 'Content-Type: application/json' \
--data '{"auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"success":true,"BTC":3.51633389,"BTC_locked":2.2983727,"BRL":180177.23,"BRL_locked":0}
Obs: "BTC" e "BRL" retornam a quantidade disponível para uso (available) e não a quantidade total em sua conta. O total é a soma destes valores com os valores bloqueados (locked)
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/open_orders \
--header 'Content-Type: application/json' \
--data '{"market":"BTC-BRL", "auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"id":"ZQVmZQNmZGNjZN","market":"BTC-BRL","type":"SELL","status":"EMPTY","amount":2.16,"price":25500,"exec_amount":0,"cost":0,"limited":"1"},
{"id":"AmNkAwDjZGNjZN","market":"BTC-BRL","type":"SELL","status":"PARTIAL","amount":0.2,"price":25600,"exec_amount":0.0616273,"cost":1577.66,"limited":"1"}
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/executed_orders \
--header 'Content-Type: application/json' \
--data '{"market":"BTC-BRL", "auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"id":"ZQVmZQNmZGNjZN","market":"BTC-BRL","type":"SELL","status":"FILLED","amount":0.16,"price":25500,"exec_amount":0.16,"cost":4080,"limited":"1"},
{"id":"AmNkAwDjZGNjZN","market":"BTC-BRL","type":"SELL","status":"PARTIAL","amount":0.2,"price":25600,"exec_amount":0.0616273,"cost":1577.66,"limited":"1"}
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/buy \
--header 'Content-Type: application/json' \
--data '{"market":"BTC-BRL", "price": 25350.00, "amount": 1.00001234, "limited": true, "auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"success":true,"order_id":"AQt0BGRkZmNjZN","message_cod":"ORDER_CREATED"}
*Para ordens de compra a valor de Mercado (limited=false), utilize volume. Amount será ignorado.
obs: O mercado BTC-BRL não permite precisão de centavos na API e o preço será arredondado.
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/sell \
--header 'Content-Type: application/json' \
--data '{"market":"BTC-BRL", "price": 25350.00, "amount": 1.00001234, "limited": true, "auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"success":true,"order_id":"AQ1eBGRkZmNjZN","message_cod":"ORDER_CREATED"}
*Para ordens de venda a valor de Mercado (limited=false), price/volume será ignorado.
obs: O mercado BTC-BRL não permite precisão de centavos na API e o preço será arredondado.
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/order_cancel \
--header 'Content-Type: application/json' \
--data '{"order_id":"AlDaJizAZTT", "auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"success":true,"message_cod":"ORDER_CANCELED"}
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/all_orders_cancel \
--header 'Content-Type: application/json' \
--data '{"auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"success":true,"orders_canceled":3}
ORDER STATUS
Descrição: Mostra o status das ordens. |
---|
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/order_status \
--header 'Content-Type: application/json' \
--data '{"order_id":"ZGNjAwVmZmRjZN", "auth_token": "ABg3M………….SEpWSQ"}'
Exemplos de respostas:
{"success":true,"order":{"id":"ZGNjAwVmZmRjZN","market":"BTC-BRL","type":"BUY","status":"EMPTY","amount":0.12,"price":14684.00,"exec_amount":0,"cost":0,"limited":"1","canceled":"0","time_stamp":"2019-01-09 05:36:17"}}
Existem essas possibilidades: EMPTY, PARTIAL, FILLED.
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/get_quote \
--header 'Content-Type: application/json' \
--data '{"auth_token": "ABg3M………….SEpWSQ", "type": "BUY", "market": "BTC-BRL", "base_amount": 0.01}'
Exemplos de respostas:
{ "success": true, "base_amount": 0.01, "quote_amount": 1431.0174, "market": "BTC-BRL", "price": 143101.749, "customer_side": "BUY", "timestamp": "2023-05-03T11:53:02-0300", "expiration": "2023-05-03T11:53:12-0300", "quote_id": "AJp1………….Z4AwRgAGx0" }
*Não enviar o base_amount e o quote_amount ao mesmo tempo.
EXECUTE QUOTE
Descrição: retorna o status da ordem recém executada. |
---|
Propriedades da requisição:
Exemplo cURL:
curl --request POST \
--url https://api.bitpreco.com/v1/trading/execute_quote \
--header 'Content-Type: application/json' \
--data '{"auth_token": "ABg3M………….SEpWSQ", "quote_id": "AJp1………….Z4AwRgAGx0"}'
Exemplos de respostas:
{ "success": true, "order_id": "10025092228", "amount": 0.01, "exec_amount": 0.01, "type": "BUY", "market": "BTC-BRL", "price": 143088.5049, "timestamp": "2023-05-03 11:54:09", "message_cod": "ORDER_FULLY_EXECUTED" }
*O quote_id a ser utilizado é retornado na resposta pela requisição get_quote.
Api Web Socket Bitypreço
Sobre a API
Os endpoints socket da Bitypreço são na verdade Phoenix Channels, que são um protocolo de
comunicação que usa WebSockets como camada de transporte, e não WebSockets puro.
Consequentemente, é necessário um client que implemente esse protocolo. Aqui tem a lista dos clients
mais populares disponíveis, sendo que o único oficial é para JavaScript e só funciona no
browser, mas
também temos uma versão não oficial para Node.
Para usuários de Google Chrome, é possível testar a conexão através de uma
extensão do
navegador.
A comunicação é feita em três etapas:
- Conectar no endpoint
- Acessar um topic
- Adicionar um callback para determinado evento
Os Endpoints
O endpoint para Livro de Ordens e para Preços:
wss://websocket.bitpreco.com/orderbook/socket/websocket
O endpoint para Notificações:
wss://websocket.bitpreco.com/notifications/socket/websocket
Tópicos
Preços - ticker
O topic de Preços (ticker) é ticker:ALL-BRL
,
e ele emite o evento price
que contém os preços
dos três mercados atualmente suportados pela plataforma:
BTC-BRL
, ETH-BRL
e
USDT-BRL
.
Livros de Ordem - Orderbook
Diferentemente do ticker que em um único tópico emite mensagem dos três mercados,
o do Livro de
Ordens (orderbook) tem um topic pra cada. O topic do orderbook
é orderbook:<market>
sendo
market
: BTC-BRL
, ETH-BRL
ou USDT-BRL
.
Esse topic emite o evento snapshot
, que
contém uma versão completa e atual do Livro de Ordens.
Notificações
Esse topic é privado, sendo necessário passar como parâmetro o
authToken. O
topic é
notifications:<authToken>
e ele emite o evento
flash
. O payload do evento é um json
que
contém o atributo type, que indica o tipo na notificação.
O atributo type pode ter os seguintes valores:
ORDER_FULLY_EXECUTED
BUY_ORDER_CREATED
SELL_ORDER_CREATED
ORDER_CANCELED
Exemplo JavaScript (Node)
Instale o client para Node
Via Yarn yarn add phoenix-channels
Ou via npm npm i phoenix-channels
Conectando e recebendo o orderbook
const { Socket } = require('phoenix-channels')
const SOCKET_URL = 'wss://bp-channels.gigalixirapp.com'
// Os mercados disponníveis são:
// BTC-BRL | ETH-BRL | USDT-BRL
const MARKET = 'BTC-BRL'
// Conecta com o socket
const socket = new Socket(`${SOCKET_URL}/orderbook/socket`)
socket.connect()
// O client nos oferece callbacks de sucesso e erro de conexão
socket.onOpen(() => {
  console.log('Connected successfully')
})
socket.onError(e => {
  console.log('Failed to connect to socket')
})
// Conecta no canal, passando o topic desejado
const channel = socket.channel(`orderbook:${MARKET}`, {})
channel.join()
.receive('ok', resp => { console.log('Joined successfully', resp); })
.receive('error', resp => { console.log('Unable to join', resp); })
// Adicionamos um callback pro evento snapshot,
// que vai receber versões completas e atualizadas do orderbook
channel.on('snapshot', payload => {
  console.log('New orderbook received: ', payload)
})
O exemplo foi testado no Node v15.4.0