> For the complete documentation index, see [llms.txt](https://portal-integracao.intelbras.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/snapshot.md).

# Snapshot

Guia de configuração de Snap por canal, capture snapshots JPEG sob demanda e assine eventos/snapshots via streaming HTTP (snapManager).

## Dicas & Boas Práticas <a href="#dicas-and-boas-praticas" id="dicas-and-boas-praticas"></a>

* Sempre que disponível, **prefira o modo Webhook (Push ativo)** para o recebimento de eventos e snapshots, pois reduz a necessidade de polling constante.
* Utilize **HTTPS em conjunto com HTTP Digest Authentication** para garantir maior segurança nas integrações com o dispositivo.
* Valide corretamente **eventos, imagens e payloads JSON recebidos**, verificando estrutura, tipos de dados e campos obrigatórios antes do processamento.
* Evite o uso de ferramentas como **Postman ou Insomnia** para APIs que utilizam **conexões persistentes ou streaming em tempo real**, pois essas ferramentas não oferecem suporte adequado para esse tipo de comunicação.
* Implemente **tratamento de exceções**, controle de **timeouts** e mecanismos de **reconexão automática**, garantindo maior estabilidade e confiabilidade do sistema.
* Para fluxos contínuos de snapshots ou eventos, assegure o **encerramento correto das conexões**, evitando consumo excessivo de recursos no dispositivo e no cliente.

***

### Tabela de Parâmetros

<table><thead><tr><th>Nome</th><th width="83.33331298828125">Tipo</th><th width="211.6666259765625">Descrição</th><th>Exemplo</th></tr></thead><tbody><tr><td><strong>Snap</strong></td><td>object[]</td><td>Um elemento para cada canal. O índice do array representa o número do canal, iniciando em 0.</td><td><code>[80, 50]</code></td></tr><tr><td><strong>HolidayEnable</strong></td><td>bool</td><td>Indica se a configuração de feriados é suportada.</td><td><code>false</code></td></tr><tr><td><strong>TimeSection</strong></td><td>char[8][24][32]</td><td>Configura os períodos de captura de snapshots. É um array bidimensional de strings.<br><br>• <strong>Primeira dimensão</strong>: dia da semana, intervalo <code>[0–7]</code> (Domingo–Sábado), sendo o último índice reservado para feriados.<br>• <strong>Segunda dimensão</strong>: índice do período do dia, intervalo <code>[0–23]</code>.<br>• Cada período é definido no formato:<br><code>mask hh:mm:ss-hh:mm:ss</code></td><td><code>[["6 00:00:00-23:59:59", "0 00:00:00-23:59:59", "0 00:00:00-23:59:59",</code></td></tr></tbody></table>

**Parâmetros:**

<table data-header-hidden><thead><tr><th width="164"></th><th width="158.33331298828125"></th><th></th></tr></thead><tbody><tr><td><code>hh</code></td><td>Hora</td><td>[0-24]</td></tr><tr><td><code>mm</code></td><td>Minuto</td><td>[0-59]</td></tr><tr><td><code>ss</code></td><td>Segundo</td><td>[0-59]</td></tr><tr><td><code>mask</code></td><td>Tipo de gravação</td><td>(0–4294967295)</td></tr></tbody></table>

### **Obter Configuração**

**Tópico:** Obtém as configurações atualmente definidas para o Snap em todos os canais do dispositivo

**Exemplo**:

```http
http://<ip>/cgi-bin/configManager.cgi?action=getConfig&name=Snap
```

**Resposta:**

```
table.Snap[0].HolidayEnable=true 
table.Snap[0].TimeSection[0][0]=6 00:00:00-23:59:59 
table.Snap[0].TimeSection[0][1]=0 00:00:00-23:59:59 
… 
table.Snap[1].HolidayEnable=false 
table.Snap[1].TimeSection[0][1]=0 00:00:00-23:59:59 
table.Snap[1].TimeSection[0][1]=0 00:00:00-23:59:59 
… 
```

### **Definir Configuração**

**Tópico:** Define ou atualiza as configurações de Snap para um ou mais canais do dispositivo.

**Exemplo**:

```http
http://<ip>/cgi-bin/configManager.cgi?action=setConfig&Snap[0].HolidayEnable=true&Snap
[0].TimeSection[0][0]=6 00:00:00-23:59:59&Snap[0].TimeSection[0][1]=0 00:00:00-23:59:59&Snap[1].
HolidayEnable=false&Snap[1].TimeSection[0][1]=0 00:00:00-23:59:59&Snap[1].TimeSection[0][1]=0 0
0:00:00-23:59:59
```

**Resposta:**

```
OK
```

### Obter uma Captura

**Tópico:** Obtém uma imagem de captura (snapshot) do canal especificado do dispositivo, retornando a imagem no formato JPEG conforme o tipo de captura solicitado.

* Método: `GET /cgi-bin/snapshot.cgi`

**Exemplo**:

```http
http://<ip>/cgi-bin/snapshot.cgi?channel=1&type=0
```

**Resposta:**

```http
HTTP/1.1 200 OK 
Server: Device/1.0 
Content-Type: image/jpeg 
Content-Length:<image size> 
 
<jpeg data> 
```

### Assinar Snapshot

**Tópico:** Inscreva-se nos eventos e nos instantâneos de eventos.

* Método: `GET /cgi-bin/snapManager.cgi?action=attachFileProc`

**Exemplo**:

```http
http://<ip>/cgi-bin/snapManager.cgi?action=attachFileProc&channel=1&heartbeat=5&Flags[0]
=Event&Events=[VideoMotion%2CVideoBlind%2CVideoLoss]
```

**Resposta:**

```http
HTTP/1.1 200 OK 
Server: Device/1.0 
Content-Type: multipart/x-mixed-replace; boundary=<boundary> 
Connection: closed 
 --<boundary> 
Content-Type: text/plain 
Content-Length: <data length> 
 
Events[0].EventBaseInfo.Code=TrafficJunction 
Events[0].EventBaseInfo.Action=Pulse 
Events[0].EventBaseInfo.Index=0 
Events[0].Channel=0 
Events[0].CountInGroup=3 
Events[0].IndexInGroup=1 
Events[0].Lane=1  
Events[0].PTS=42949485818.0 
Events[0].TrafficCar.PlateNumber=ZZZ12345 
Events[0].TrafficCar.DeviceAddress=XXXRoad 
…… 
Events[1].Channel=1 
Events[1].EventBaseInfo.Code=TrafficJunction 
Events[1].EventBaseInfo.Action=Pulse 
Events[1].EventBaseInfo.Index=1 
Events[1].CountInGroup=3 
Events[1].IndexInGroup=2 
Events[1].Lane=1 
…… --<boundary> 
Content-Type: image/jpeg 
Content-Length:<image size> 
 
<JPEG image data> --<boundary> 
Content-Type: text/plain 
Content-Length:<data length> 
 
Heartbeat --<boundary> 
……
```

#### Tabela de Parâmetros

<table><thead><tr><th>Nome</th><th width="88">Tipo</th><th width="237">Descrição</th><th>Exemplo</th></tr></thead><tbody><tr><td><strong>channel</strong></td><td>int</td><td>Número do canal de vídeo. Inicia em <strong>1</strong>.<br>• Se não informado, o valor padrão é <strong>1</strong>.<br>• Valor <strong>-1</strong> indica assinatura de <strong>todos os canais</strong>.</td><td><code>1</code></td></tr><tr><td><strong>heartbeat</strong></td><td>int</td><td>Intervalo de heartbeat para manter a conexão ativa.<br>• Unidade: segundos<br>• Intervalo: <code>[1–60]</code><br>• Valor padrão: <code>5</code><br>Durante o envio de eventos, o dispositivo envia periodicamente a mensagem <code>"heartbeat"</code>.</td><td><code>5</code></td></tr><tr><td><strong>Flags</strong></td><td>char[][32]</td><td>Parâmetro de assinatura. Deve conter obrigatoriamente o valor <code>"Event"</code>.</td><td><code>["Event"]</code></td></tr><tr><td><strong>Events</strong></td><td>char[][32]</td><td>Lista de códigos de eventos a serem assinados.<br>Use <code>"All"</code> para assinar todos os eventos disponíveis.</td><td><code>["VideoMotion", "VideoBlind", "TrafficJunction"]</code></td></tr><tr><td><strong>Events</strong></td><td>object[]</td><td>Array com os detalhes dos eventos recebidos. Cada elemento representa um evento disparado.</td><td>—</td></tr><tr><td><strong>EventBaseInfo</strong></td><td>object</td><td>Informações básicas compartilhadas por todos os eventos.</td><td>—</td></tr><tr><td><strong>EventBaseInfo.Code</strong></td><td>char[32]</td><td>Código do evento ocorrido.</td><td><code>"FaceRecognition"</code></td></tr><tr><td><strong>EventBaseInfo.Action</strong></td><td>char[16]</td><td>Ação do evento.<br>Valores possíveis: <code>Start</code>, <code>Stop</code>, <code>Pulse</code>.</td><td><code>"Pulse"</code></td></tr><tr><td><strong>EventBaseInfo.Index</strong></td><td>int</td><td>Número do canal onde o evento ocorreu. Inicia em <strong>0</strong>.</td><td><code>0</code></td></tr><tr><td><strong>Channel</strong></td><td>int</td><td>Número do canal de vídeo associado à imagem gerada pelo evento. Inicia em <strong>0</strong>.</td><td><code>0</code></td></tr></tbody></table>

***

Notas finais:

* As APIs de **Snap e assinatura de snapshots** utilizam **conexões persistentes**, sendo indispensável o uso de clientes compatíveis com streaming HTTP.
* O **Heartbeat** deve ser monitorado para garantir que a conexão continua ativa e que o dispositivo está disponível.
* Eventos e imagens podem chegar intercalados no fluxo multipart, exigindo tratamento adequado no cliente.
* A configuração correta dos períodos (`TimeSection`) é essencial para evitar capturas desnecessárias e otimizar o uso de recursos.

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://portal-integracao.intelbras.com.br/cameras-and-gravadores/integracao-api-cftvip-e-mibo/cameras-e-gravadores/snapshot.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
