Execução da ordem de compra e venda

beta

Este endpoint permite que o cliente do parceiro Bankly possa concluir o processo de compra ou venda de criptomoedas com a mesma cotação retornada na última consulta do endpoint de Cotação de criptomoedas.

Para que seja possível executar a ordem de compra ou venda, é necessário informar o identificador da transação (authenticationCode), retornado no endpoint de criação da ordem.

Conta cripto

Os valores referentes às criptomoedas adquiridas são reservados em uma conta cripto.

A conta cripto consiste em uma conta pocket, ou conta bolsão, que tem como característica guardar um determinado valor em um local separado da conta de pagamento.

Portanto, antes de uma ordem de compra ser executada, o sistema irá verificar se já existe uma conta cripto vinculada àquele CPF ou CNPJ. Caso ela não exista, será gerada automaticamente.

A execução da ordem de compra é finalizada somente após a geração da conta cripto.

📘

Nota

É possível consultar o saldo da conta cripto por meio do endpoint Consulta de saldo da conta pocket.

Pré-requisito

Para que seja possível utilizar este endpoint, é necessário que o cliente do parceiro:

  • Possua uma conta ativa;
  • Tenha criado uma ordem de compra ou venda em até um minuto.

Requisição (Request)

Requisição HTTP

POST https://api-mtls.sandbox.bankly.com.br/v2/crypto/orders/{authenticationCode}
--request POST \
--url 'https://api-mtls.sandbox.bankly.com.br/v2/crypto/orders/{authenticationCode}' \
--header 'accept: application/json' \
--header 'bankly-idempotency-key: FLORESTA_ED' \
--header 'bankly-version: 2023-01-30' \
--header 'bankly-user-id: 47742663023' \
--header 'authorization: Bearer' \
--header 'content-type: application/json' \
--header 'bankly-correlation-id: 5a88c4ae-99cd-494e-96b7-39b8109c8a77' \
--data '{
        "data": {
          "account": {
            "branch": "0001",
            "number": "15163"
          }
        },
        "metadata": {
          "exemplo1": "123",
          "exemplo2": 123,
          "exemplo3": {},
          "exemplo4": [],
		    }
      }'

Autorização

Para garantir a segurança nas requisições, todos os endpoints do Bankly utilizam scopes como parte do seu fluxo de autorização.
Esta requisição requer o scope descrito a seguir:

ScopeDescrição
crypto.order.createConcede acesso para criar a ordem de compra ou venda.

Cabeçalhos (Headers)

NomeDescrição
bankly-versionObrigatório. Data em que ocorreu a alteração no contrato. Neste caso, insira 2023-01-30.
authorizationObrigatório. Token de autorização do tipo Bearer.
bankly-correlation-idObrigatório. Informe um GUID, sendo um novo cada requisição.
bankly-idempotency-keyObrigatório. Chave de idempotência para a requisição (UUID v4).
bankly-user-idObrigatório. Número do documento do usuário que irá fazer a requisição.

Parâmetros da rota (Path)

No path desta requisição envie o seguinte campo:

NomeTipoDescrição
authenticationCodepathObrigatório. Identificador da transação retornado no endpoint de Criação de intenção de compra e venda de criptomoedas.

Corpo da requisição (Body)

No body, envie os seguintes campos em formato JSON:

NomeTipoDescrição
accountobjectObrigatório. Objeto que contém informações sobre a conta do usuário.
account.branchstringObrigatório. Número da agência.
account.numberstringObrigatório. Número da conta.
metadatadictionary<string, object>Dicionário de metadados que pode conter informações adicionais da requisição, de acordo com o modelo de negócio do cliente.
{
  "data": {
    "account": {
      "branch": "0001",
      "number": "226513"
    }
  },
  "metadata": {
		"exemplo1": "123",
		"exemplo2": 123,
		"exemplo3": {},
		"exemplo4": [],
	}
}

Resposta (Response)

O status code 201 indicará que a ordem de compra ou venda foi executada com sucesso.

Sendo bem-sucedido, o retorno irá trazer um objeto contendo os seguintes campos em formato JSON:

NomeTipoDescrição
authenticationCodestringIdentificador da transação informado no path desta requisição.
typestringTipo de ordem (compra ou venda), o qual pode ser “PURCHASE” ou “SELL”.
marketstringO mercado, o qual é constituído da sigla da criptomoeda com a sigla do real. Exemplo: BTC:BRL.
statusstringSituação da ordem de execução de compra ou venda.
accountobjectObjeto que contém informações sobre a conta principal do usuário.
account.branchstringNúmero da agência bancária.
account.numberstringNúmero da conta bancária.
priceobjectObjeto que contém informações sobre o preço da criptomoeda.
price.valuenumberPreço final da criptomoeda.
price.currencystringSigla da criptomoeda.
amountobjectObjeto que contém informações sobre o valor da compra ou venda das criptomoedas, sem taxa.
data.amount.valuenumberValor da compra ou venda sem taxa.
data.amount.currencystringSigla da moeda com base na ISO-4217.
data.feeobjectObjeto que contém informações sobre a taxa aplicada no valor da compra ou venda das criptomoedas.
fee.valuenumberValor da taxa.
fee.currencystringSigla da moeda com base na ISO-4217.
quotaobjectObjeto que contém informações sobre o valor da operação, em criptomoeda.
quota.valuenumberValor da operação.
quota.currencystringSigla da criptomoeda.
data.totalobjectObjeto que contém informações sobre o valor total da operação, em reais (amount+ fee).
total.valuestringValor da operação.
total.currencystringSigla da moeda.
createdAtstringData de criação da execução da ordem de compra ou venda, no formato ISO 8601 - UTC.
updatedAtstringData de atualização da ordem de compra ou venda, no formato ISO 8601 - UTC.
metadataobjectDicionário de metadados que pode conter informações adicionais da requisição, de acordo com o modelo de negócio do cliente.
links[]array of objectsLista de objetos que contém os links de próximos estados válidos da entidade/recurso.
{
   "data": {
     "authenticationCode": "60c66bce-0127-4e07-a35d-d14d31e4126a",
     "type": "PURCHASE",
     "market": "BTC:BRL",
     "status": "DONE",
     "account": {
       "branch": "0001",
       "number": "15164"
     },
     "price": {
       "value": 107497.22,
       "currency": "BRL"
     },
     "amount": {
       "value": 1,
       "currency": "BRL"
     },
     "fee": {
       "value": 2.1,
       "currency": "BRL"
     },
     "quota": {
       "value": 0.0000093,
       "currency": "BTC"
     },
     "total": {
        "value": 3.1,
        "currency": "BRL"
     },
     "createdAt": "2023-01-04T17:41:19.733Z",
     "updatedAt": "2023-01-04T17:41:19.733Z"
   },
   "metadata": {
      "exemplo1": "123",
      "exemplo2": 123,
      "exemplo3": {},
      "exemplo4": []
   },
   "links": [
      {
         "url": "/crypto/orders/60c66bce-0127-4e07-a35d-d14d31e4126a",
         "rel": "get_order",
         "method": "GET"
      }
   ]
 }

Possíveis status da ordem de execução de compra ou venda

StatusDescrição
CREATEDOrdem solicitada.
IN_PROCESSOrdem em processamento.
DONEOrdem executada.
EXPIREDOrdem expirada.
👍

Dica

Para simular uma requisição nesse endpoint, acesse o API Reference.

Erros

Este endpoint pode retornar alguns erros específicos, conforme a tabela a seguir:

Status CodeCódigoDescrição
422MAXIMUM_POCKETS_COUNT_REGISTERED_FOR_ACCOUNTO limite de pockets foi excedido para esta conta.

Recordamos que esta API também poderá retornar erros comuns entre todos os endpoints. Portanto, recomendamos a consulta da documentação de erros, onde é possível encontrar as mensagens comuns em inglês que acompanham os erros 400 (se houver).

Eventos

Caso o parceiro deseje receber mensagens referentes aos eventos relacionados a esse endpoint, é preciso configurar o webhook. Os eventos são:

Nome do eventoDescrição
CRYPTO_ORDER_WAS_EXECUTEDOrdem de compra ou venda executada.

Copyright © 2021 Acesso Soluções de Pagamento S.A - Todos os direitos reservados