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

# preconfSubscribe

> Inscreva-se em transações Solana agendadas no momento em que um validador se compromete a executá-las — antes de serem fragmentadas. Filtragem opcional no servidor por status, região e contas.

Inicie uma assinatura para [Pré-confirmações](/docs/pt-BR/pre-confirmations/overview) — transações entregues na etapa de transação agendada, antes de serem coletadas em entradas e convertidas em fragmentos. Este é o sinal de transação com menor latência que a Helius oferece.

## Endpoints

`preconfSubscribe` é servido a partir do endpoint Helius [Gatekeeper](/docs/pt-BR/gatekeeper/overview):

* `wss://beta.helius-rpc.com/?api-key=<API_KEY>`

O hostname `beta` refere-se à implantação do Gatekeeper, não à maturidade das Pré-confirmações — ele se tornará o endpoint padrão à medida que o tráfego migrar para o Gatekeeper.

<Note>
  O fluxo não é contínuo. A cobertura escala com a participação de rede
  encaminhando para a Helius, então espere slots sem mensagens — lide com essas lacunas
  de forma adequada. Consulte [Cobertura](/docs/pt-BR/pre-confirmations/overview#cobertura).
</Note>

## Autorizações

<ParamField query="api-key" type="string" required>
  Sua chave de API da Helius, passada como o parâmetro de consulta `api-key`. Requer um plano Profissional ou superior.
</ParamField>

## Corpo

<ParamField body="params" type="array">
  Opcional. Omitir `params` para receber todas as transações agendadas. Para restringir o fluxo, passe um objeto de filtro como o primeiro elemento — a filtragem acontece no servidor, assim você só paga e recebe as transações de seu interesse.

  <Expandable title="Filtro" defaultOpen>
    Cada campo é opcional — um campo ausente significa "sem restrição" para esse predicado, então um filtro vazio corresponde a cada transação. Define campos combinados com **E**, avaliados na ordem `regionInclude` → `accountExclude` → `accountRequired` → `accountInclude`.

    <ParamField body="failed" type="boolean">
      `false` descarta transações falhas (revertidas); transações de sucesso e com status desconhecido ainda passam. `true` — como omitir o campo — mantém todos os status.
    </ParamField>

    <ParamField body="regionInclude" type="string[]">
      Se não estiver vazio, a transação deve se originar de **uma dessas** [regiões](#códigos-de-região). Transações sem informações de região são descartadas quando isso é definido.
    </ParamField>

    <ParamField body="accountInclude" type="string[]">
      Se não estiver vazio, a transação deve referenciar **pelo menos uma** dessas contas (chaves públicas base58). Limitado a 500 entradas.
    </ParamField>

    <ParamField body="accountExclude" type="string[]">
      A transação é descartada se referenciar **qualquer uma** dessas contas. Tem precedência sobre `accountInclude`. Limitado a 500 entradas.
    </ParamField>

    <ParamField body="accountRequired" type="string[]">
      A transação deve referenciar **todas** essas contas. Limitado a 500 entradas.
    </ParamField>
  </Expandable>
</ParamField>

Um valor de conta inválido ou código de região não reconhecido retorna erro JSON-RPC `-32602` (parâmetros inválidos).

Os filtros de conta correspondem a mais do que as chaves de conta estáticas da transação — a Helius resolve tabelas de pesquisa de endereço v0 [tables de pesquisa de endereço](/docs/pt-BR/glossary#tabela-de-pesquisa-de-endereços-alt) no servidor, então `accountInclude`, `accountExclude`, e `accountRequired` também correspondem a contas que uma transação carrega por meio de um ALT.

### Códigos de região

| Código | Localização    | Código | Localização |
| ------ | -------------- | ------ | ----------- |
| `slc`  | Salt Lake City | `tyo`  | Tóquio      |
| `fra`  | Frankfurt      | `ams`  | Amsterdã    |
| `lon`  | Londres        | `dal`  | Dallas      |
| `pit`  | Pittsburgh     | `dub`  | Dublin      |
| `sgp`  | Singapura      | `mia`  | Miami       |
| `ewr`  | Newark         | `lax`  | Los Angeles |
| `iad`  | Ashburn        | `sea`  | Seattle     |

## Resposta

<ResponseField name="result" type="integer">
  ID da assinatura (necessário para cancelar a inscrição)
</ResponseField>

<RequestExample>
  ```json Request theme={"system"}
  {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "preconfSubscribe",
    "params": [
      {
        "failed": false,
        "regionInclude": ["ewr", "fra"],
        "accountInclude": ["9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM"]
      }
    ]
  }
  ```

  ```javascript JavaScript theme={"system"}
  const WebSocket = require('ws');

  const ws = new WebSocket('wss://beta.helius-rpc.com/?api-key=<API_KEY>');

  ws.on('open', () => {
    ws.send(JSON.stringify({
      jsonrpc: '2.0',
      id: 1,
      method: 'preconfSubscribe'
      // Optional filter:
      // params: [{ failed: false, accountInclude: ['9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM'] }]
    }));

    setInterval(() => ws.ping(), 30_000);
  });

  ws.on('message', (data, isBinary) => {
    // The subscribe acknowledgement arrives as a JSON text frame
    if (!isBinary) {
      const msg = JSON.parse(data.toString());
      if (msg.id === 1) console.log('Subscribed, ID:', msg.result);
      return;
    }

    // Notifications arrive as binary frames:
    // version (u8) | slot (u64 LE) | tx_index (u64 LE) | status (u8) | bincode(VersionedTransaction)
    const buf = Buffer.from(data);
    const version = buf.readUInt8(0);
    if (version !== 1) return; // unknown schema version; update your decoder
    const slot = buf.readBigUInt64LE(1);
    const txIndex = buf.readBigUInt64LE(9);
    const status = buf.readUInt8(17); // 0 = failed, 1 = success, 2 = unknown
    const txBytes = buf.subarray(18); // bincode-serialized VersionedTransaction

    console.log('Scheduled transaction:', { slot, txIndex, status, bytes: txBytes.length });
  });
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={"system"}
  { "jsonrpc": "2.0", "id": 1, "result": 24040 }
  ```

  ```text Notification (binary frame) theme={"system"}
  version   u8              payload schema version, currently 1
  slot      u64 (LE)        slot the transaction is scheduled in
  tx_index  u64 (LE)        index of the transaction within the slot
  status    u8              0 = failed, 1 = success, 2 = unknown
  tx        bincode bytes   bincode(VersionedTransaction)
  ```
</ResponseExample>

## Notificações

Após o reconhecimento em JSON, as notificações são entregues como frames WebSocket **binários** (não JSON). Cada frame é um layout de bytes empacotados que transporta uma única transação agendada:

| Bytes | Campo         | Tipo                            | Descrição                                                                                                                                                                           |
| ----- | ------------- | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 0     | `version`     | `u8`                            | Versão do esquema de payload. Atualmente `1`.                                                                                                                                       |
| 1–8   | `slot`        | `u64` (little-endian)           | O slot em que a transação está agendada.                                                                                                                                            |
| 9–16  | `tx_index`    | `u64` (little-endian)           | Índice da transação dentro do slot.                                                                                                                                                 |
| 17    | `status`      | `u8`                            | Status da transação: `0` = falha, `1` = sucesso, `2` = desconhecido. O status de execução é relatado pelos validadores com base no melhor esforço — `2` quando não está disponível. |
| 18+   | `transaction` | `bincode(VersionedTransaction)` | A transação agendada, serializada em formato bincode.                                                                                                                               |

Leia os campos em ordem e, em seguida, [`bincode`](https://docs.rs/bincode)-desserialize os bytes restantes em um `VersionedTransaction` para ler instruções, contas e a assinatura.

<Warning>
  **Sempre leia e verifique o byte `version` primeiro.** Atualmente é `1`. Se
  a Helius precisar atualizar o formato do payload, a versão será incrementada — ramifique
  para que seu decodificador continue funcionando em mudanças de esquema.
</Warning>

Uma pré-confirmação é um sinal inicial, não uma garantia. A transação ainda não foi registrada onchain e ainda pode falhar ou ser descartada. Confirme o registro por meio de verificações de compromisso padrão antes de tratá-la como final.

## Preços

As pré-confirmações exigem um **plano Profissional ou superior** e custam **10 créditos por mensagem** — uma mensagem por transação transmitida. Veja [Créditos](/docs/pt-BR/billing/credits) para detalhes.

## Relacionados

<CardGroup cols={2}>
  <Card title="Visão Geral das Pré-confirmações" icon="bolt" href="/docs/pt-BR/pre-confirmations/overview">
    O que são Pré-confirmações e onde elas se situam no pipeline do validador.
  </Card>

  <Card title="preconfUnsubscribe" icon="circle-stop" href="/docs/pt-BR/api-reference/pre-confirmations/preconfunsubscribe">
    Cancele uma assinatura pelo seu ID.
  </Card>
</CardGroup>
