Entenda como a API da Bitypreço funciona | Bitypreço

Documentação API

Acesso Rápido:

Api do Simulador

Como funciona:

*NOVIDADE* - Agora temos a API do simulador, para você testar seus robôs antes de ir para a plataforma real, no simulador todos os valores da Bitypreço exchange são simulados e você pode testar o quanto quiser com dinheiro fictício. Para usar é só trocar o endereço para: api-simulator.bitpreco.com e usar todos os endpoints abaixo trocando apenas a URL.

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: retorna o ticker de preço da criptomoeda.
  • orderbook: retorna as ofertas de compra e venda da criptomoeda.
  • trades: retorna as negociações ou operações realizadas da criptomoeda.

  • 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
  • high: maior valor negociado nas últimas 24h.
  • low: menor valor negociado nas últimas 24h.
  • var: variação entre o menor e maior valor (em porcentagem).
  • vol: Volume negociado nas últimas 24h.
  • last: Último valor negociado.
  • timestamp: dia e horas que foram gerados estes valores.


  • 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
  • asks: lista das ofertas de venda disponíveis. As ofertas são listadas com os valores de volume disponível seguido do preço unitário em Reais e id da ordem. ([{volume disponível}, {preço unitário em Reais}, {id da ordem}]).
  • bids: lista das ofertas de compra disponíveis. As ofertas são listadas com os valores de volume disponível seguido do preço unitário em Reais e id da ordem.([{volume disponível}, {preço unitário em Reais}, {id da ordem}]).
  • timestamp: dia e horas que foram gerados estes valores.

  • Exemplo de retorno:
    {
    "bids":[{ "amount":0.00337633, "price":26697.09, "id":"AQV2BGNlZQNjZN" }],
    "asks":[{ "amount":0.10909091, "price":27194.93, "id":"ZwV2BGNlZQNjZN"}],
    "timestamp":"2018-09-13 01:44:27"
    }

    Trades

    https://api.bitpreco.com/btc-brl/trades
    Retornará um JSON com os campos
  • type: tipo de ordem executada, buy:compra e sell:venda
  • amount: menor valor negociado nas últimas 24h.
  • timestamp: variação entre o menor e maior valor (em porcentagem).
  • price: Volume negociado nas últimas 24h.


  • 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:

  • signature =

    "ABg3MTIxOTYzOQtrDtKNGae9YG3NjNHK0ZFVkY1UWVCaCtRQXYvWkIxRlAvSlRSV"

  • api_key =

    “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:

  • auth_token = [seu_token] (string)..

  • 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:

  • market = [BTC-BRL] (string) - opcional
  • auth_token = [seu_token] (string).

  • 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:

  • market = [BTC-BRL] (string) - opcional
  • auth_token = [seu_token] (string).

  • 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:

  • market = "BTC-BRL" (string).
  • price/volume* = [preço em BRL] (float) .
  • amount = [quantidade] (float) .
  • limited = [true/false] (boolean - padrão=true) .
  • auth_token = [seu_token] (string).

  • 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:

  • market = "BTC-BRL" (string).
  • price/volume* = [preço em BRL] (float) .
  • amount = [quantidade] (float) .
  • limited = [true/false] (boolean - padrão=true) .
  • auth_token = [seu_token] (string).

  • 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:

  • order_id = [order id] (string).
  • auth_token = [seu_token] (string).

  • 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:

  • auth_token = [seu_token] (string).

  • 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}

    Propriedades da requisição:

  • order_id = "xxxxxxxx" (string)
  • auth_token = [seu_token] (string)..

  • 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:

  • auth_token = [seu_token] (string)
  • type = [BUY/SELL] (string)
  • market = "BTC-BRL" (string)
  • base_amount* = [quantidade] (float)
  • quote_amount* = [preço em BRL] (float)

  • 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.

    Propriedades da requisição:

  • auth_token = [seu_token] (string)..
  • quote_id* = [id da ordem] (string)

  • 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:

    1. Conectar no endpoint
    2. Acessar um topic
    3. 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

    Qualquer dúvida entre em contato [email protected]