> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voxfi.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Canal Market

> Recebendo atualizações sobre mercados específicos

## Visão Geral

O canal `market` permite receber atualizações em tempo real sobre um ou mais mercados específicos. Você pode escolher receber atualizações de orderbook, trades ou ambos.

## Autenticação

O canal `market` **não requer autenticação**. Você pode se inscrever sem fornecer uma chave de API.

## Subscribe

Para se inscrever no canal market:

```json theme={null}
{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1", "market-id-2"],
  "filter": "orderbook"
}
```

### Requisitos

* **`markets`** (obrigatório): Array de IDs de mercado
* **`filter`** (opcional): Tipo de atualização desejada
  * `""` ou `"all"`: Todas as atualizações (padrão)
  * `"orderbook"`: Apenas atualizações de orderbook
  * `"trades"`: Apenas atualizações de trades

### Exemplos

#### Receber Todas as Atualizações

```json theme={null}
{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1"]
}
```

#### Receber Apenas Orderbook

```json theme={null}
{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1", "market-id-2"],
  "filter": "orderbook"
}
```

#### Receber Apenas Trades

```json theme={null}
{
  "type": "subscribe",
  "channel": "market",
  "markets": ["market-id-1"],
  "filter": "trades"
}
```

## Mensagens Recebidas

### Atualização de Orderbook

Recebida quando há mudanças no orderbook de um mercado (quando `filter` é `"orderbook"` ou `"all"`).

**Estrutura:**

```json theme={null}
{
  "msg_type": "update-orderbook",
  "event_id": "string",
  "market_id": "string",
  "orderbook": {
    "yes_orderbook": {
      "outcome": "YES",
      "bids": [
        {
          "price_ticks": 40,
          "quantity": 100,
          "order_count": 2
        }
      ],
      "asks": [
        {
          "price_ticks": 41,
          "quantity": 150,
          "order_count": 3
        }
      ],
      "spread": 1,
      "last_transaction": 40
    },
    "no_orderbook": {
      "outcome": "NO",
      "bids": [],
      "asks": [],
      "spread": null,
      "last_transaction": null
    },
    "market_price_yes": 40,
    "market_price_no": 60,
    "chance": 40,
    "volume": 10000,
    "liquidity": 5000,
    "spread_yes": 1,
    "spread_no": 2
  }
}
```

### Nova Trade

Recebida quando uma nova trade é executada em um mercado (quando `filter` é `"trades"` ou `"all"`).

**Estrutura:**

```json theme={null}
{
  "msg_type": "new-trades",
  "event_id": "string",
  "market_id": "string",
  "last_trades": [
    {
    "canceled": false,
    "taker_id": "string",
    "total_amount": 1000,
    "qty_contracts": 10,
    "avg_price": 40,
    "side": "BUY",
    "contract_type": "YES",
    "makers": [
      {
        "maker_id": "string",
        "qty_contracts": 5,
        "price": 40,
        "total_amount": 500,
        "side": "SELL",
        "contract_type": "YES"
      }
    ]
  }
  ]
}
```

### Atualização Completa

Recebida quando há atualizações gerais no mercado (quando `filter` é `"all"` ou não especificado).

**Estrutura:**

```json theme={null}
{
  "msg_type": "update",
  "event_id": "string",
  "market_id": "string",
  "orderbook": {
    // Mesma estrutura do orderbook acima
  },
  "last_trades": [
    {
    // Mesma estrutura da trade acima
  }
  ]
}
```

## Exemplo de Uso

<CodeGroup>
  ```javascript JavaScript theme={null}
  const ws = new WebSocket('wss://data-ws-dev.voxfi.com.br');

  ws.onopen = () => {
    // Inscrever-se em um mercado com filtro orderbook
    ws.send(JSON.stringify({
      type: 'subscribe',
      channel: 'market',
      markets: ['market-id-1'],
      filter: 'orderbook'
    }));
  };

  ws.onmessage = (event) => {
    const data = JSON.parse(event.data);
    
    if (data.msg_type === 'update-orderbook') {
      console.log('Orderbook atualizado para mercado:', data.market_id);
      console.log('Preço YES:', data.orderbook.market_price_yes);
      console.log('Preço NO:', data.orderbook.market_price_no);
    } else if (data.msg_type === 'new-trades') {
      console.log('Nova trade no mercado:', data.market_id);
      console.log('Trades:', data.last_trades);
    }
  };
  ```

  ```python Python theme={null}
  import asyncio
  import websockets
  import json

  async def subscribe_market():
      uri = "wss://data-ws-dev.voxfi.com.br"
      
      async with websockets.connect(uri) as websocket:
          # Inscrever-se em um mercado
          subscribe_msg = {
              "type": "subscribe",
              "channel": "market",
              "markets": ["market-id-1"],
              "filter": "orderbook"
          }
          await websocket.send(json.dumps(subscribe_msg))
          
          # Receber mensagens
          async for message in websocket:
              data = json.loads(message)
              
              if data.get("msg_type") == "update-orderbook":
                  print(f"Orderbook atualizado para mercado: {data['market_id']}")
                  print(f"Preço YES: {data['orderbook']['market_price_yes']}")
                  print(f"Preço NO: {data['orderbook']['market_price_no']}")
              elif data.get("msg_type") == "new-trades":
                  print(f"Nova trade no mercado: {data['market_id']}")
                  print(f"Trades: {data['last_trades']}")

  asyncio.run(subscribe_market())
  ```
</CodeGroup>

## Unsubscribe

Para cancelar a inscrição de mercados específicos:

```json theme={null}
{
  "type": "unsubscribe",
  "channel": "market",
  "markets": ["market-id-1", "market-id-2"]
}
```

## Campos do Orderbook

Consulte a [documentação completa do orderbook](/pt/api/orderbook) para detalhes sobre os campos retornados.

### Campos Principais

* **`market_price_yes`**: Preço de mercado atual para YES em ticks (0-100);
* **`market_price_no`**: Preço de mercado atual para NO em ticks (0-100);
* **`chance`**: Probabilidade de YES em percentual (0-100);
* **`volume`**: Total de contratos criados (trades históricas);
* **`liquidity`**: Total de contratos disponíveis no orderbook;
* **`spread_yes`**: Spread para YES em ticks;
* **`spread_no`**: Spread para NO em ticks.

## Casos de Uso

* **Monitoramento de Preços**: Use com filtro `orderbook` para receber atualizações de preço em tempo real;
* **Análise de Liquidez**: Monitore a profundidade do orderbook para avaliar liquidez;
* **Tracking de Trades**: Use com filtro `trades` para monitorar atividade de negociação;
* **Alertas de Preço**: Configure alertas quando preços atingirem certos níveis;
* **Market Making**: Use atualizações de orderbook para ajustar suas ordens limitadas.

## Boas Práticas

* **Use Filtros**: Se você só precisa de orderbook ou trades, use o filtro apropriado para reduzir o tráfego;
* **Múltiplos Mercados**: Você pode se inscrever em múltiplos mercados na mesma conexão;
* **Gerenciamento de Estado**: Mantenha o estado local do orderbook e atualize conforme as mensagens chegam;
* **Identificação de Mercado**: Sempre verifique o `market_id` nas mensagens para garantir que está processando o mercado correto.
