Requisição
URL: https://api.flowbtc.com.br:8443/ap/ping
A FlowBTC disponibiliza dois tipos de API: REST e Websockets. Todos os endpoints disponíveis para Websockets (mais abaixo nesta página) também podem ser usandos para REST, mesmo endpoints autenticados. Os únicos endpoints que não funcionarão em REST são aqueles com streaming de dados como os endpoints de Subscribe. Aqui vão alguns exemplos de endpoints públicos usando REST:
URL: https://api.flowbtc.com.br:8443/ap/ping
{"msg":"PONG"}
Obtenha dados básicos de cada par negociado na FlowBTC, como cotação, volume etc.
URL: https://api.flowbtc.com.br:8443/ap/GetLevel1?OMSId=1&InstrumentId={código}
Códigos: (1) BTCBRL, (2) ETHBRL, (3) LTCBRL, (4) TAKIONBRL, (5) BCHBRL, (6) ETHBTC, (7) XRPBRL, (8) EOSBRL, (9) MCO2BRL
Exemplo: https://api.flowbtc.com.br:8443/ap/GetLevel1?OMSId=1&InstrumentId=1
Um array contento objetos com as seguintes propriedades:
BestBid: Melhor oferta de compra;
BestOffer: Melhor oferta de venda;
LastTradedPx: Preço do último trade;
LastTradedQty: Quantidade do último trade;
LastTradeTime: Timestamp do último trade;
SessionOpen: Preço de abertura (Últimas 24h);
SessionHigh: Preço máximo (Últimas 24h);
SessionClose: Preço de fechamento (Últimas 24h);
Volume: Volume de trades;
CurrentDayVolume: Volume do dia;
CurrentDayNumTrades: Número de trades no dia;
CurrentDayPxChange: Variação de preço no dia;
Rolling24HrVolume: Volume nas últimas 24h;
Rolling24HrNumTrades: Número de trade nas últimas 24h;
Rolling24HrPxChange: Variação de preço nas últimas 24h;
Exemplo:
{
"status": "success",
"data": {
"BestBid": 24280.08,
"BestOffer": 24518.21,
"LastTradedPx": 24380.1,
"LastTradedQty": 0.01,
"SessionOpen": 25786.16,
"SessionHigh": 27100,
"SessionLow": 24380.1,
"SessionClose": 25590,
"Volume": 0.01,
"CurrentDayVolume": 0.75388947,
"CurrentDayNumTrades": 37,
"CurrentDayPxChange": -1209.9,
"Rolling24HrVolume": 0.83041127,
"Rolling24HrPxChange": -4.874442973476934
},
"message": null
}
Obtenha dados do book.
URL: https://api.flowbtc.com.br:8443/ap/GetL2Snapshot?OMSId={código}&InstrumentId=1&Depth=10
Códigos: (1) BTCBRL, (2) ETHBRL, (3) LTCBRL, (4) TAKIONBRL, (5) BCHBRL, (6) ETHBTC, (7) XRPBRL, (8) EOSBRL, (9) MCO2BRL
Exemplo: https://api.flowbtc.com.br:8443/ap/GetL2Snapshot?OMSId=1&InstrumentId=1&Depth=10
Possíveis parâmetros de query:
depth: até que profundidade do book deseja ir. Valor padrão é 10.
Exemplo: https://api.flowbtc.com.br:8443/ap/GetL2Snapshot?OMSId=1&InstrumentId=1&Depth=5
Um objeto com um array de bids e asks sem os nomes das chaves (keys) e as seguintes propriedades:
Número de referência da Ordem/Update;
Número de clientes únicos naquele preço;
Data da última ação em formato Posix X 1000;
Tipo da ação 0 (Nova), 1 (Update), 2(Delete);
Último preço negociado;
Número de ordens naquele preço;
Preço da Ordem;
Código do Par;
Quantidade;
Lado (0) Compra (1) Venda;
Exemplo:
[[3300312,1,1602269461897,0,60705.10,1,60727.05,1,0.02764813,0],[3300312,1,1602269461897,0,60705.10,1,60721.55,1,1.97235187,0],[3300312,1,1602269461897,0,60705.10,1,60618.89,1,0.16588419,0],[3300312,1,1602269461897,0,60705.10,1,61282.99,1,1.56584245,1],[3300312,1,1602269461897,0,60705.10,1,61288.53,1,0.10401187,1],[3300312,1,1602269461897,0,60705.10,1,61294.07,1,0.33014568,1]]
Link para a conexão:
wss://api.finchain.alphaprod.net/wsgateway/
Descreve o tipo de chamada à qual a mensagem está relacionada. Os valores válidos são:
{ "m": 0, "i": 0, "n": "function", "o": "payload" }
Todas as Chamadas e Respostas do WebSocket são incorporadas em um objeto JSON formatado em string contendo as informações relevantes sobre a chamada ou resposta, bem como o payload.
0 = Request 1 = Reply 2 = Subscribe To Event 3 = Event 4 = Unsubscribe from Event 5 = Error
Este é o número sequencial da mensagem. O número sequencial do lado do cliente deve ser sempre um número par, de modo que sua variável de número de sequência sempre deve ser incrementada em 2. Todas as mensagens conterão um número de sequência original (tipos de mensagem 0, 2, 3, 4) ou conterá o ID da mensagem de solicitação na qual a mensagem está em resposta (tipos de mensagem 1, 5).
i += 2 (tipos da mensagem 0, 2, 3, 4)
Este é o nome da função remota na qual a mensagem é uma solicitação ou uma resposta. Por exemplo, se você deseja fazer uma chamada para uma função, a solicitação deve conter seu nome neste campo. A resposta também retornará o nome neste campo.
n: "WebAuthenticateUser"
Este é um JSON que deve ser formatado em string que contém os dados que estão sendo enviados com a mensagem, como parâmetros em uma solicitação ou como os dados em uma resposta a uma solicitação.
{ "UserName": "usuário", "Password": "senha" }
Ao enviar uma solicitação para nossa API usando javascript, deve-se formatar tanto o payload quanto o frame para string. Uma chamada seria da seguinte forma:
var frame = { "m": 0, "i": 0, "n": "function name", "o": "" } var requestPayload = { "Parameter1": "Value", "Parameter2": 0 } frame.o = json.Stringify(requestPayload); WS.Send(json.Stringify(frame));
Ao receber um frame da nossa API, use-o para determinar o contexto e, em seguida, converta o conteúdo para JSON:
var frame = json.Parse(wsMessage); if (frame.i == 1) { //This is a Reply if (frame.n == "WebAuthenticateUser") { var LoginReply = json.Parse(frame.o); if (LoginReply.Authenticated) { var user = LoginReply.User; } } }
Respostas com payloads sem dados ou erros comuns seguirão o seguinte padrão:
// Chamada bem-sucedida sem objeto de retorno { "result": true, "errormsg": null, "errorcode": 0, "detail": null } // Chamada sem sucesso devido a falta de autorização { "result": false, "errormsg": "Not Authorized", "errorcode": 20, "detail": null } // Chamada sem sucesso devido a parâmetros de solicitação inválidos { "result": false, "errormsg": "Invalid Request", "errorcode": 100, "detail": null } // Chamada sem sucesso devido a falha na operação { "result": false, "errormsg": "Operation Failed", "errorcode": 101, "detail": null } // Chamada sem sucesso devido a uma falha inesperada no servidor { "result": false, "errormsg": "Server Error", "errorcode": 102, "detail": null } // Chamada sem sucesso devido a falta de algum recurso (id do usuário não encontrado, etc) { "result": false, "errormsg": "Resource Not Found", "errorcode": 104, "detail": null }
Nessesário para usar qualquer uma das chamadas autenticadas.
{
"UserName": "usuário",
"Password": "senha"
}
{
"Authenticated": true,
"SessionToken": "7d0ccf3a-ae63-44f5-a409-2301d80228bc",
"UserId": 1
}
Conecte-se aos eventos da conta, como pedidos, negociações, depósitos e retiradas. É altamente recomendável que você use essa conexão para rastrear os estados dos seus pedidos.
{
"AccountId": 1,
"OMSId": 1
}
{
"result": true
}
Recupera os recentes de trades e conecta o usuário as atualizações do instrumento especificado.
{
"OMSId": 1,
"Symbol ou InstrumentId": "BTCUSD ou 1",
"IncludeLastCount": 100
}
"[\n [\n 87,\n 1,\n 0.01,\n 450.98,\n 9222816249026513000,\n 9222816249026513000,\n 635872032000000000,\n 0,\n 1\n ]\n]\n\nValores do Array de resposta:\n\n[0] Trade Number [64 bit Integer]\n\n[1] InstrumentId [Integer]\n\n[2] Quantity [Decimal]\n\n[3] Price [Decimal]\n\n[4] Order1Id [Integer]\n\n[5] Order2Id [Integer]\n\n[6] Timestamp\n\n[7] Direction [Integer] 0=NoChange 1=Uptick 2=Downtick\n\n[8] TakerSide [Integer] Side of trade representing the Taker"
Desconecta o usuário do feed do mercado.
{
"OMSId": 1,
"Symbol ou InstrumentId": "BTCUSD ou 1"
}
{
"result": true
}
Obtenha dados de ticker para preencher um gráfico e assinar futuros ticks. "Interval" especifica com que frequência obter atualizações e "IncludeLastCount" limita o número de registros no histórico.
{
"OMSId": 1,
"InstrumentId": 1,
"Interval": "60",
"IncludeLastCount": 1000
}
"[\n [\n 1468896617000,\n 680,\n 680,\n 680,\n 680,\n 0.4,\n 674.18,\n 680\n ]\n]\n\nValores do Array de resposta:\n\n[0] Timestamp\n\n[1] HighPrice [Decimal]\n\n[2] LowPrice [Decimal]\n\n[3] OpenPrice [Decimal]\n\n[4] ClosePrice [Decimal]\n\n[5] Volume [Decimal]\n\n[6] Bid [Decimal]\n\n[7] Ask [Decimal]"
Desconecta o usuário do feed de ticks.
{
"OMSId": 1,
"InstrumentId": 1
}
{
"result": true,
"errormsg": null,
"errorcode": 0,
"detail": null
}
2º passo no processo de autenticação do Google 2FA. O endpoint só é disponibilizado para a sessão após a ativação de EnableGoogle2FA e o fornecimento do GoogleQRCode a partir dessa resposta.
{
"Code": "YourCode"
}
{
"Authenticated": true,
"SessionToken": "7d0ccf3a-ae63-44f5-a409-2301d80228bc"
}
Cancela a tentativa de autenticação 2FA pendente.
{}
{
"result": true,
"errormsg": null,
"errorcode": 0,
"detail": null
}
Obter dados de ticker para preencher um gráfico.
{
"OMSId": 1,
"InstrumentId": 1,
"FromDate": "2016-07-18",
"ToDate": "2016-07-21",
"Interval": "60"
}
"[\n [\n 1468896617000,\n 680,\n 680,\n 680,\n 680,\n 0.4,\n 674.18,\n 680\n ]\n]\n\nValores do Array de resposta:\n\n[0] Timestamp\n\n[1] HighPrice [Decimal]\n\n[2] LowPrice [Decimal]\n\n[3] OpenPrice [Decimal]\n\n[4] ClosePrice [Decimal]\n\n[5] Volume [Decimal]\n\n[6] Bid [Decimal]\n\n[7] Ask [Decimal]"
Solicita as informações de um único produto da API.
{
"OMSId": 1,
"Symbol ou ProductId": "BTCBRL ou 1"
}
{
"OMSId": 1,
"ProductId": 1,
"Product": "BTCBRL",
"ProductFullName": "Bitcoin",
"ProductType": "CryptoCurrency",
"DecimalPlaces": 9
}
Solicita uma lista de produtos disponíveis da API.
{
"OMSId": 1
}
[
{
"OMSId": 1,
"ProductId": 1,
"Product": "BTCBRL",
"ProductFullName": "Bitcoin",
"ProductType": "CryptoCurrency",
"DecimalPlaces": 9
}
]
Pega as infromações do usuário atualmente autenticado.
{}
{
"UserId": 58,
"UserName": "testusername",
"Email": "abc@ap.com",
"PasswordHash": "",
"PendingEmailCode": "",
"EmailVerified": true,
"AccountId": 0,
"DateTimeCreated": "2016-04-21T21:48:22Z",
"AffiliateId": 0,
"RefererId": 0,
"OMSId": 1,
"Use2FA": false,
"PendingCodeTime": "2016-07-20T19:28:44Z"
}
Definir as informações do usuário atualmente autenticado.
{
"UserId": 58,
"UserName": "testusername",
"Email": "abc@ap.com",
"PasswordHash": "",
"PendingEmailCode": "",
"EmailVerified": true,
"AccountId": 4,
"DateTimeCreated": "2016-04-21T21:48:22Z",
"AffiliateId": 0,
"RefererId": 0,
"OMSId": 1,
"Use2FA": false,
"PendingCodeTime": "2016-07-21T22:56:10Z"
}
{
"UserId": 58,
"UserName": "testusername",
"Email": "abc@ap.com",
"PasswordHash": "",
"PendingEmailCode": "",
"EmailVerified": true,
"AccountId": 4,
"DateTimeCreated": "2016-04-21T21:48:22Z",
"AffiliateId": 0,
"RefererId": 0,
"OMSId": 1,
"Use2FA": false,
"PendingCodeTime": "2016-07-21T22:56:10Z"
}
Obtenha as informações de uma conta específica, se a sessão atual estiver autorizada para ver as informações da conta.
{
"OMSId": 1,
"AccountId": 40
}
{
"OMSID": 1,
"AccountId": 40,
"AccountName": "Primary Account",
"AccountType": "Asset",
"FeeGroupID": 0,
"ParentID": 0,
"RiskType": "Normal",
"VerificationLevel": 0,
"FeeProductType": "BaseProduct",
"FeeProduct": 0,
"RefererId": 0,
"AffiliateId": null,
"SupportedVenueIds": []
}
Recupera o histórico de transações de uma conta específica.
{
"OMSId": 1,
"AccountId": 4,
"Count": 50,
"StartIndex": 0
}
[
{
"OMSId": 1,
"TradeId": 230,
"OrderId": 9861,
"AccountId": 4,
"ClientOrderId": 0,
"InstrumentId": 1,
"Side": "Buy",
"Quantity": 2,
"Price": 95,
"Value": 190,
"TradeTime": 635978015145675000,
"ContraAcctId": 3,
"OrderTradeRevision": 1,
"Direction": "NoChange"
}
]
Cria um ticket de depósito para ser rastreado pelo sistema de tickets.
{
"AccountId": 1,
"AssetId": 1,
"Amount": 100,
"OMSId": 1,
"DepositInfo": "Result of GetDepositInfo"
}
{
"success": true,
"requestcode": "special code for future use"
}
Este endpoint inicia uma retirada de fundos.
{
"OMSId": 1,
"AccountId": 18,
"ProductId": 1,
"Amount": 0.01,
"TemplateType": "ToExternalBitcoinAddress",
"TemplateForm": "{\"TemplateType\":\"ToExternalBitcoinAddress\",\"Comment\":\"\",\"ExternalAddress\":\"54123214\"}"
}
{
"result": true
}
Envia uma nova ordem para a API. É importante que você esteja "SUBSCRIBED TO ACCOUNT ACTIONS --> TODO" para ver eventos de status atualizados para pedidos inseridos. Como alternativa, você também pode chamar GetOpenOrders e/ou GetOrderHistory para verificar o status do seu pedido. Lembre-se de que, se o seu pedido não estiver mais em um estado de funcionamento, você não o encontrará usando GetOpenOrders.
[Integer] Seu Account Id.
[64 bit Integer] Defina o seu próprio Id, se você quiser. Este Id é útil para reconhecer futuros estados de pedidos relacionados a esta chamada.
[Integer] O Id do instrumento. O valores podem ser: 1 (BTCBRL), 2 (ETHBRL), 3 (LTCBRL), 5 (BCHBRL), 6 (ETHBTC), 7 (XRPBRL) e 8 (EOSBRL).
[Integer] Lado da ordem. Os valores podem ser: 0 (Compra) ou 1 (Venda).
[Decimal] Quantidade da Ordem.
[Decimal] Quantidade a exibir no mercado. Se o seu pedido for 1000 e você quer mostrar apenas 100 por vez nos dados de mercado, defina 100. Defina 0 para mostrar tudo.
[Integer] O tipo da ordem. Os valores podem ser: 1 (Mercado), 2 (Limite) e 3 (StopMarket).
[Decimal] O preço limite para ordens Limite. Omitir se não for uma ordem limite.
[Decimal] O preço stop para oderns Stop. Omitir se não for uma ordem stop.
[Integer] Sempre 1
[64 Bit Integer] Se você quiser que esta ordem cancele outra em execução, defina este campo com o Id da ordem a ser cancelada. Omita ou defina como 0 se não quer usar.
{
"AccountId": 5,
"ClientOrderId": 99,
"InstrumentId": 1,
"Side": 0,
"Quantity": 1,
"DisplayQuantity": 0,
"OrderType": 2,
"LimitPrice": 95,
"StopPrice": 96,
"OMSId": 1,
"OrderIdOCO": 0
}
{
"status": "Accepted",
"errormsg": "",
"OrderId": 123
}
Envia uma solicitação de modificação de uma ordem para a exchange. Somente a quantidade de um pedido pode ser alterada sem cancelar o pedido.
{
"OMSId": 1,
"OrderId": 0,
"InstrumentId": 1,
"PreviousOrderRevision": 0,
"Quantity": 0
}
{}
Cancela uma ordem aberta e a substitui por uma nova.
{
"AccountId": 5,
"OrderIdToReplace": 1,
"ClientOrderId": 99,
"Quantity": 1,
"DisplayQuantity": 0,
"LimitPrice": 95,
"OrderIdOCO": 0,
"OrderType": 2,
"PegPriceType": 1,
"InstrumentId": 1,
"TrailingAmount": 1,
"LimitOffset": 2,
"Side": 0,
"StopPrice": 96.6,
"TimeInForce": 1,
"OMSId": 1
}
{
"status": "Processing",
"errormsg": ""
}
Cancela uma ordem aberta - Podendo ser cancelada por OrderId usando o id retornado quando o pedido foi criado ou pelo ClOrderId e AccountId do pedido. Se AccountId não for especificado, a conta de usuário padrão será usada.
{
"OMSId": 1,
"AccountId": 0,
"ClOrderId": 0,
"OrderId": 0
}
{
"status": "Processing",
"errormsg": ""
}
Cancela todas as ordens de um instrumento/conta especificado. Pode especificar UserId ou AccountId, se nenhum dos dois for fornecido, os valores padrão serão os valores de usuário autenticados. Somente um operador pode cancelar pedidos de outro usuário ou conta.
{
"AccountId": 4,
"UserId": 2,
"OMSId": 1,
"InstrumentId": 1
}
{
"status": "Processing",
"errormsg": ""
}
Obtém o status operacional atual de um pedido enviado ao OMS.
{
"OMSId": 1,
"AccountId": 4,
"OrderId": 1
}
{
"Side": "Sell",
"OrderId": 9849,
"Price": 97,
"Quantity": 0.29,
"Instrument": 1,
"Account": 4,
"OrderType": "Limit",
"ClientOrderId": 0,
"OrderState": "Working",
"ReceiveTime": 0,
"OrigQuantity": 1,
"QuantityExecuted": 0.71,
"AvgPrice": 0,
"ChangeReason": "Unknown",
"OrigOrderId": 9849,
"OrigClOrdId": 1,
"EnteredBy": 2
}
Pega a taxa computada para execução de ordens.
{
"OMSId": 1,
"AccountId": 4,
"InstrumentId": 1,
"ProductId": 1,
"Amount": 500,
"OrderType": "Market",
"MakerTaker": "Maker"
}
{
"OrderFee": 0,
"ProductId": 1
}
Recupera uma lista das últimas 100 ordens feitas em sua conta.
{
"OMSId": 1,
"AccountId": 1
}
[
{
"Side": "Sell",
"OrderId": 9849,
"Price": 97,
"Quantity": 0.29,
"Instrument": 1,
"Account": 4,
"OrderType": "Limit",
"ClientOrderId": 0,
"OrderState": "Working",
"ReceiveTime": 0,
"OrigQuantity": 1,
"QuantityExecuted": 0.71,
"AvgPrice": 0,
"ChangeReason": "Unknown",
"OrigOrderId": 9849,
"OrigClOrdId": 1,
"EnteredBy": 2
}
]
Recupera as ordens abertas de todas as contas do usuário atual.
{
"OMSId": 1,
"AccountId": 1
}
[
{
"Side": "Sell",
"OrderId": 9849,
"Price": 97,
"Quantity": 0.29,
"Instrument": 1,
"Account": 4,
"OrderType": "Limit",
"ClientOrderId": 0,
"OrderState": "Working",
"ReceiveTime": 0,
"OrigQuantity": 1,
"QuantityExecuted": 0.71,
"AvgPrice": 0,
"ChangeReason": "Unknown",
"OrigOrderId": 9849,
"OrigClOrdId": 1,
"EnteredBy": 2
}
]
Usamos cookies para garantir que você obtenha a melhor experiência no nosso site. Leia mais...
Entendi!