Neste artigo vamos nos aprofundar nos detalhes de como autenticar-se na nossa API. Para este exemplo usaremos Python.

Para mais informações, veja a nossa documentação completa de API e nossos exemplos de código no GitHub.

Visão Geral

A primeira coisa que você precisa para conectar-se à nossa API é a sua chave de API e sua chave secreta, no resto do artigo vamos nos referir à elas como ‘API’ e ‘segredo’, respectivamente. Você criar o seu par de chaves aqui https://ftx.com/profile

Suas requisições precisam ter o seguinte cabeçalho:

  1. FTX-KEY: A sua chave de API.

  2. FTX-TS: o número de milisegundos desde a era Unix.

  3. FTX-SIGN: é a criptografia SHA256 HMAC das seguintes strings, sua chave secreta como hex string: solicita timestamp (como o acima), método HTTP em caixa alta (e.g. GET or POST), caminho da request, incluindo a barra invertida e quaisquer parâmetros de URL, mas sem incluir o nome do host (e.g. /account), corpo da request (JSON-encoded) somente para requisições POST.

  4. FTX-SUBACCOUNT (optional): nome da subconta a ser usada, URI-encoded. Omitir, caso não esteja usando as subcontas.

O código generalizado deve parecer com algo assim:

import time
import hmac
from requests import Request

ts = int(time.time() * 1000)
request = Request('GET', '<api_endpoint>')
prepared = request.prepare()
signature_payload = f'{ts}{prepared.method}{prepared.path_url}'
if prepared.body:
    signature_payload += prepared.body
signature_payload = signature_payload.encode()
signature = hmac.new('YOUR_API_SECRET'.encode(), signature_payload, 'sha256').hexdigest()

request.headers['FTX-KEY'] = 'YOUR_API_KEY'
request.headers['FTX-SIGN'] = signature
request.headers['FTX-TS'] = str(ts)

# Só adicione essa linha se você quiser acessar as subcontas. Lembre-se de criptografar o nome da subconta usando URI, se esta possuir caracteres especiais!
# request.headers['FTX-SUBACCOUNT'] = urllib.parse.quote('my_subaccount_name')

Obtenha exemplos de assinaturas

Vamos olhar em mais detalhes como uma requisição GET /markets se parece, para fins desse exemplo vamos usar as seguintes chaves de API:

api = "LR0RQT6bKjrUNh38eCw9jYC89VDAbRkCogAc_XAm"
secret = "T4lPid48QtjNxjLUFOcUZghD7CUJ7sTVsfuvQZF2"

Vamos usar o seguinte timestamp:

ts = 1588591511721
signature_payload = b'1588591511721GET/api/markets'
signature = "dbc62ec300b2624c580611858d94f2332ac636bb86eccfa1167a7777c496ee6f"

Exemplo de Assinatura usanndo POST

Neste exemplo, nós vamos ver como POST /orders fica usando as mesmas chaves de API. Vamos dizer que queremos colocar uma ordem limite de compra de 1 BTC no BTC-PERP em /$8500

ts = 1588591856950
signature_payload = b'1588591856950POST/api/orders{"market": "BTC-PERP", "side": "buy", "price": 8500, "size": 1, "type": "limit", "reduceOnly": false, "ioc": false, "postOnly": false, "clientId": null}'
signature = "c4fbabaf178658a59d7bbf57678d44c369382f3da29138f04cd46d3d582ba4ba"

Note que a ordem dos argumentos nas assinaturas importam: deve acompanhar a ordem do corpo do post acima.

Erro de Não logado

Se você encontrar algum erro de não logado (Not logged in error) significa que sua autenticação falhou. Neste caso, tenha certeza de que seu código está correto verificando o exemplo acima e checando o seu timestamp com o do nosso servidor usando esse endpoint https://otc.ftx.com/api/time



Sam Bankman-Fried