Pular para o conteúdo principal

watchOrders

Receba atualizações em tempo real sobre o status das ordens de compra e venda.

Subscrição

{
"action": "subscribe",
"channel": "watchOrders"
}

Payload de Dados

Notificação enviada quando o status de uma ordem muda. O conteúdo de message segue o mesmo schema retornado por GET /orders/fetchOrder — varia conforme o status:

  • Ordens em estados não terminais (ex.: pending, executed) trazem apenas o bloco base abaixo.
  • Ordens closed trazem o bloco base + campos estendidos (account, orderPoolId, filledStatus, cost, price, info, fee, trades, RFQ).
  • Ordens rejected trazem o bloco base com errorMessage preenchido e sem os campos estendidos.

Exemplo de ordem closed

{
"channel": "watchorders",
"message": {
"id": "string",
"exchange": "string",
"symbol": "string",
"side": "buy",
"type": "market",
"status": "closed",
"errorMessage": "",
"amount": "string",
"amountOriginal": "string",
"remainingAmount": "string",
"quoteAmount": "string",
"quoteAmountOriginal": "string",
"remainingQuoteAmount": "string",
"average": "string",
"createdAt": 1712100000,
"updatedAt": 1712100012,
"executedAt": 1712100012,
"channel": "string",
"rule": "string",
"operationalFees": "string",
"account": "string",
"orderPoolId": "string",
"filledStatus": "filled",
"filled": "string",
"remaining": "string",
"cost": "string",
"price": "string",
"info": "string",
"fee": {
"cost": "string",
"rate": "string",
"cripto": "string",
"tierCaas": {
"currentTierFeeRate": "string",
"currentTierFeeFiat": "string",
"currentTierFeeCripto": "string"
}
},
"trades": [
{
"id": "string",
"takerOrMaker": "string",
"type": "string",
"side": "string",
"price": "string",
"amount": "string",
"cost": "string",
"timestamp": 1712100012,
"fee": {
"cost": "string",
"rate": "string",
"cripto": "string"
}
}
]
}
}

Exemplo de ordem rejected

{
"channel": "watchorders",
"message": {
"id": "string",
"exchange": "string",
"symbol": "string",
"side": "sell",
"type": "market",
"status": "rejected",
"errorMessage": "Insufficient balance",
"amount": "string",
"quoteAmount": "string",
"quoteAmountOriginal": "string",
"remainingQuoteAmount": "string",
"average": "0",
"createdAt": 1712100000,
"updatedAt": 1712100120,
"channel": "string",
"rule": "string",
"operationalFees": "string"
}
}

Campos do message

Campos base (presentes em qualquer status)

CampoTipoDescrição
idstringIdentificador da ordem
exchangestringExchange utilizada. Em modo liqi-managed retorna "liqi".
symbolstringPar de mercado (ex: BTC/BRL)
sidestringbuy ou sell
typestringTipo da ordem (market por padrão)
statusstringStatus atual — ver tabela de status abaixo
errorMessagestringMensagem de erro quando status = "rejected"; vazio nos demais casos
amountstringQuantidade de cripto
quoteAmountstringValor em FIAT (R$)
quoteAmountOriginalstringValor em FIAT originalmente solicitado
remainingQuoteAmountstringValor restante em FIAT
averagestringPreço médio de execução
createdAtnumberTimestamp Unix de criação
updatedAtnumberTimestamp Unix da última atualização
executedAtnumber?Timestamp Unix da execução (quando aplicável)
channelstringCanal de origem da ordem
rulestringRegra SOR utilizada
operationalFeesstringTaxas operacionais

Campos estendidos (apenas em status = "closed")

CampoTipoDescrição
accountstringID da conta do cliente
orderPoolIdstringID da ordem no pool
filledStatusstringDetalhe do preenchimento (ex.: filled, partiallyFilled)
amountOriginalstringQuantidade originalmente solicitada
remainingAmountstringQuantidade restante em cripto
filledstringQuantidade efetivamente preenchida
remainingstringQuantidade restante a preencher
coststringCusto total da ordem
pricestringPreço médio
infostringInformação adicional do provedor
feeobjectDetalhes das taxas (Liqi + tier)
tradesarrayLista de trades individuais que compuseram a ordem
RFQobject?Detalhes da cotação RFQ (somente em ordens RFQ executadas)

Status possíveis

StatusDescrição
pendingOrdem aberta, em validação ou aguardando execução
executedOrdem executada no provedor, aguardando finalização
closedOrdem finalizada com sucesso (campos estendidos presentes)
rejectedOrdem rejeitada (errorMessage preenchido)
expiredCotação RFQ que expirou antes de virar ordem
observação

O canal sempre chega em minúsculas no payload ("channel": "watchorders"), mesmo se você tiver subscrito como watchOrders.

Exemplo JavaScript

const token = 'SEU_TOKEN_OPERACIONAL';
const ws = new WebSocket(`wss://websocket-caas-it-sandbox.liqi.app.br/?token=${token}`);

ws.onopen = () => {
ws.send(JSON.stringify({
action: 'subscribe',
channel: 'watchOrders'
}));
};

ws.onmessage = (event) => {
const { channel, message } = JSON.parse(event.data);
if (channel === 'watchorders') {
console.log(`Ordem ${message.id}: ${message.status}`);
console.log(`${message.side} ${message.amount} ${message.symbol} @ ${message.average}`);
}
};