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

# Estatísticas

> Estatísticas de leituras de um código QR ou de todo o seu espaço de trabalho.

> [!NOTE]
>
> A API do GetQR está em versão beta e só está disponível para alguns espaços de trabalho. Os detalhes podem mudar antes do lançamento geral.

Obtenha totais de leituras e discriminações por país, dispositivo, navegador e muito mais, para um único código QR ou para todo o seu espaço de trabalho.

| Método | Caminho | Descrição |
| - | - | - |
| `GET` | `/api/v1/qrs/{qrId}/analytics` | [Obter as estatísticas de um código QR](#obter-as-estatísticas-de-um-código-qr) |
| `GET` | `/api/v1/analytics` | [Obter as estatísticas do espaço de trabalho](#obter-as-estatísticas-do-espaço-de-trabalho) |

Para um resumo já pronto por código QR, consulte [Relatórios](https://docs.getqr.com/pt/api/endpoints/reports.md).

## O que significam os números

* **Leituras.** Todas as contagens estão no campo `clicks`. É contada uma leitura sempre que alguém abre a ligação curta do código QR.
* **Leituras únicas.** Com `unique=true`, cada visitante é contado uma única vez no intervalo de datas.
* **Âmbito.** Os números vêm da ligação curta do código QR. Um código QR sem ligação curta não tem leituras para contar.
* **Histórico.** As estatísticas não podem ser repostas através da API. Eliminar um código QR não apaga os respetivos dados históricos de leituras.

## Cabeçalhos

**Authorization** `string` *required*

`Bearer` seguido da sua chave de API. Consulte [Autenticação](https://docs.getqr.com/pt/api/authentication.md).

## Parâmetros de consulta

Ambos os endpoints aceitam estes parâmetros. Todos são opcionais.

**groupBy** `string` (default: count)

Dimensão da discriminação. `count` devolve o total. Consulte [Discriminações](#discriminações) para ver todos os valores e a estrutura da respetiva resposta.

**interval** `string` (default: 30d)

Intervalo de datas predefinido: `24h`, `7d`, `30d`, `90d`, `1y`, `mtd`, `qtd`, `ytd` ou `all`. Consulte [Intervalos de datas](#intervalos-de-datas). É ignorado quando envia `start`.

**start** `string`

Início de um intervalo personalizado, ISO 8601, por exemplo `2026-08-01` ou `2026-08-01T00:00:00Z`. Tem precedência sobre `interval`. Tem de ser anterior a `end`.

**end** `string`

Fim de um intervalo personalizado, ISO 8601. Por predefinição, o fim do dia de hoje. É usado em conjunto com `start` ou `interval=all`, e ignorado com os outros intervalos.

**timezone** `string` (default: UTC)

Fuso horário IANA usado para alinhar o agrupamento de `timeseries`, por exemplo `America/New_York`. Um fuso horário desconhecido devolve `422`.

**unique** `boolean` (default: false)

`true` conta as leituras únicas em vez das leituras totais.

Também pode enviar [filtros de dimensão](#filtros-de-dimensão).

## Intervalos de datas

| `interval` | Abrange | Agrupamento de `timeseries` |
| - | - | - |
| `24h` | As últimas 24 horas | Horas |
| `7d` | Os últimos 7 dias, incluindo hoje | Dias |
| `30d` | Os últimos 30 dias, incluindo hoje | Dias |
| `90d` | Os últimos 90 dias, incluindo hoje | Dias |
| `1y` | Os últimos 365 dias, incluindo hoje | Meses |
| `mtd` | Mês até à data | Dias |
| `qtd` | Trimestre até à data | Dias |
| `ytd` | Ano até à data | Dias, ou meses a partir de 180 dias |
| `all` | Desde a criação do seu espaço de trabalho | Dias, ou meses a partir de 180 dias |

Para um intervalo personalizado, envie `start` e, opcionalmente, `end`. Os intervalos até 2 dias são agrupados por hora, os intervalos com mais de 180 dias são agrupados por mês e todos os restantes são agrupados por dia.

## Filtros de dimensão

Restrinja os resultados às leituras que correspondem a um filtro. Os filtros diferentes são combinados com AND. Quando um filtro aceita vários valores, separe-os com vírgulas: os valores são combinados com OR.

| Filtro | Valor | Vários valores |
| - | - | - |
| `country` | Código de país ISO 3166-1 alfa-2, por exemplo `US` | Sim |
| `region` | Código de região ISO 3166-2, por exemplo `US-CA` | Sim |
| `city` | Nome da cidade, por exemplo `New York` | Sim |
| `continent` | `AF`, `AN`, `AS`, `EU`, `NA`, `OC` ou `SA` | Sim |
| `device` | Tipo de dispositivo, por exemplo `Mobile` ou `Desktop` | Sim |
| `browser` | Nome do navegador, por exemplo `Chrome` | Sim |
| `os` | Sistema operativo, por exemplo `iOS` ou `Windows` | Sim |
| `url` | URL de destino | Sim |
| `referer` | Referenciador, por exemplo `google.com` | Não |
| `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content` | Valor UTM, até 190 caracteres | Não |

Um código de país ou de continente desconhecido devolve `422`. Os nomes de dispositivo, navegador e sistema operativo são comparados com a primeira letra em maiúscula, pelo que `mobile` funciona como `Mobile`.

Por exemplo, leituras nos EUA ou no Canadá em dispositivos móveis: `?country=US,CA&device=Mobile`.

## Discriminações

`count` devolve um objeto. Todos os outros valores devolvem um array, ordenado por `clicks` do maior para o menor (`timeseries` é ordenado por tempo).

| `groupBy` | Cada item contém |
| - | - |
| `count` | `clicks` (um objeto, não um array) |
| `timeseries` | `start` (início do agrupamento), `clicks` |
| `continents` | `continent`, `clicks` |
| `regions` | `region`, `country`, `clicks` |
| `countries` | `country`, `city` (sempre `*`), `clicks` |
| `cities` | `city`, `country`, `clicks` |
| `devices` | `device`, `clicks` |
| `browsers` | `browser`, `clicks` |
| `os` | `os`, `clicks` |
| `triggers` | `trigger` (`qr` ou `link`), `clicks` |
| `referers` | `referer` (`(direct)` quando desconhecido), `clicks` |
| `referer_urls` | `refererUrl` (`(direct)` quando desconhecido), `clicks` |
| `top_links` | `id`, `domain`, `key`, `shortLink`, `url`, `createdAt`, `qr` (`id`, `qrType`, `title`), `clicks` |
| `top_urls` | `url`, `clicks` |
| `top_types` | `qr_type`, `clicks` |
| `utm_sources`, `utm_mediums`, `utm_campaigns`, `utm_terms`, `utm_contents` | O valor UTM (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term` ou `utm_content`), `clicks` |

Um `groupBy` desconhecido devolve `422` com a lista de valores válidos.

Resposta quando `groupBy=count`:

```json theme={null}
{ "clicks": 142 }
```

Resposta quando `groupBy=countries`:

```json theme={null}
[
  { "country": "US", "city": "*", "clicks": 87 },
  { "country": "DE", "city": "*", "clicks": 31 },
  { "country": "GB", "city": "*", "clicks": 24 }
]
```

## Obter as estatísticas de um código QR

`GET /api/v1/qrs/{qrId}/analytics`

Devolve as estatísticas de leituras de um código QR, limitadas à respetiva ligação curta. Aceita os [parâmetros de consulta](#parâmetros-de-consulta) e os [filtros de dimensão](#filtros-de-dimensão) acima.

**qrId** `string` *required*

ID do código QR. Obtenha-o na resposta da listagem ou da criação de [Códigos QR](https://docs.getqr.com/pt/api/endpoints/qr-codes.md).

```bash Total scans, last 30 days theme={null}
curl "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/analytics?groupBy=count&interval=30d" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```bash Unique scans theme={null}
curl "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/analytics?groupBy=count&interval=30d&unique=true" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```bash By country, last 7 days theme={null}
curl "https://getqr.com/api/v1/qrs/qr_1EPcVfeHZAY2iNoVLsgW2Aqf/analytics?groupBy=countries&interval=7d" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "clicks": 142
}
```

## Obter as estatísticas do espaço de trabalho

`GET /api/v1/analytics`

Devolve as estatísticas de leituras de todos os códigos QR do seu espaço de trabalho. Aceita os [parâmetros de consulta](#parâmetros-de-consulta) e os [filtros de dimensão](#filtros-de-dimensão) acima, mais estes parâmetros de âmbito.

**domain** `string`

Com `key`, limita os resultados à ligação curta com este domínio, por exemplo `getqr.sh`. O domínio tem de pertencer ao seu espaço de trabalho.

**key** `string`

Slug da ligação curta, por exemplo `x7Kd2p1`. Use-o em conjunto com `domain`. Ambos estão no [objeto de código QR](https://docs.getqr.com/pt/api/endpoints/qr-codes.md).

**qrType** `string`

Tipos de código QR a incluir, separados por vírgulas: `website`, `pdf`, `image`, `video`, `whatsapp`, `social`, `wifi`, `app`, `feedback`, `vcard`, `sms`, `payment`, `location`, `multilink`, `email` ou `event`. Consulte [Tipos de QR](https://docs.getqr.com/pt/api/guides/qr-types.md).

```bash Devices, last 7 days theme={null}
curl "https://getqr.com/api/v1/analytics?groupBy=devices&interval=7d" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```bash Devices, website QR codes only theme={null}
curl "https://getqr.com/api/v1/analytics?groupBy=devices&interval=30d&qrType=website" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```bash One short link theme={null}
curl "https://getqr.com/api/v1/analytics?groupBy=count&domain=getqr.sh&key=x7Kd2p1" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
[
  { "device": "Mobile", "clicks": 980 },
  { "device": "Desktop", "clicks": 240 }
]
```

## Problemas comuns

> [accordion] 400 "QR has no associated link."
>
> O código QR não tem ligação curta, pelo que não há leituras para contar.

> [accordion] 404 ao filtrar por domínio e chave
>
> Não existe no seu espaço de trabalho nenhuma ligação curta com esse domínio e esse slug. Copie `domain` e `key` do objeto de código QR.

> [accordion] 422 em groupBy, interval ou num filtro
>
> O valor não é suportado. A mensagem de erro indica o parâmetro e lista os valores válidos.

> [accordion] Os números não coincidem com os do painel
>
> Verifique se usa o mesmo intervalo de datas e o mesmo fuso horário, e se conta leituras únicas (`unique=true`) ou leituras totais.

## Próximos passos

> [card] [Relatórios](https://docs.getqr.com/pt/api/endpoints/reports.md)

> [card] [Códigos QR](https://docs.getqr.com/pt/api/endpoints/qr-codes.md)

> [card] [Estatísticas na aplicação](https://docs.getqr.com/pt/analytics/overview.md)

> [card] [Limites de pedidos](https://docs.getqr.com/pt/api/rate-limits.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.