> ## 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.

# Analityka

> Statystyki skanowań dla jednego kodu QR lub całego obszaru roboczego.

> [!NOTE]
>
> API GetQR jest w wersji beta i jest dostępne dla wybranych obszarów roboczych. Szczegóły mogą się zmienić przed ogólną premierą.

Pobieraj łączną liczbę skanowań i podziały według kraju, urządzenia, przeglądarki i innych wymiarów, dla pojedynczego kodu QR lub całego obszaru roboczego.

| Metoda | Ścieżka | Opis |
| - | - | - |
| `GET` | `/api/v1/qrs/{qrId}/analytics` | [Analityka kodu QR](#analityka-kodu-qr) |
| `GET` | `/api/v1/analytics` | [Analityka obszaru roboczego](#analityka-obszaru-roboczego) |

Gotowe podsumowanie dla każdego kodu QR znajdziesz w sekcji [Raporty](https://docs.getqr.com/pl/api/endpoints/reports.md).

## Co oznaczają liczby

* **Skanowania.** Każda liczba znajduje się w polu `clicks`. Skanowanie jest liczone za każdym razem, gdy ktoś otworzy krótki link kodu QR.
* **Unikalne skanowania.** Z `unique=true` każdy odwiedzający jest liczony raz w danym zakresie dat.
* **Zakres danych.** Liczby pochodzą z krótkiego linku kodu QR. Kod QR bez krótkiego linku nie ma skanowań do policzenia.
* **Historia.** Analityki nie można zresetować przez API. Usunięcie kodu QR nie usuwa historycznych danych skanowań.

## Nagłówki

**Authorization** `string` *required*

`Bearer`, a po nim Twój klucz API. Zobacz [Uwierzytelnianie](https://docs.getqr.com/pl/api/authentication.md).

## Parametry zapytania

Oba endpointy przyjmują te parametry. Wszystkie są opcjonalne.

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

Wymiar podziału. `count` zwraca sumę. Wszystkie wartości i kształt odpowiedzi dla każdej z nich opisuje sekcja [Podziały](#podziały).

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

Predefiniowany zakres dat: `24h`, `7d`, `30d`, `90d`, `1y`, `mtd`, `qtd`, `ytd` lub `all`. Zobacz [Zakresy dat](#zakresy-dat). Ignorowany, gdy wysyłasz `start`.

**start** `string`

Początek niestandardowego zakresu, ISO 8601, np. `2026-08-01` lub `2026-08-01T00:00:00Z`. Ma pierwszeństwo przed `interval`. Musi być wcześniejszy niż `end`.

**end** `string`

Koniec niestandardowego zakresu, ISO 8601. Domyślnie koniec dzisiejszego dnia. Używany razem ze `start` lub `interval=all`, a przy pozostałych interwałach ignorowany.

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

Strefa czasowa IANA, według której wyrównywane są przedziały `timeseries`, np. `America/New_York`. Nieznana strefa czasowa zwraca `422`.

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

`true` liczy unikalne skanowania zamiast łącznej liczby skanowań.

Możesz też wysyłać [filtry wymiarów](#filtry-wymiarów).

## Zakresy dat

| `interval` | Obejmuje | Przedziały `timeseries` |
| - | - | - |
| `24h` | Ostatnie 24 godziny | Godziny |
| `7d` | Ostatnie 7 dni, łącznie z dzisiejszym | Dni |
| `30d` | Ostatnie 30 dni, łącznie z dzisiejszym | Dni |
| `90d` | Ostatnie 90 dni, łącznie z dzisiejszym | Dni |
| `1y` | Ostatnie 365 dni, łącznie z dzisiejszym | Miesiące |
| `mtd` | Od początku miesiąca | Dni |
| `qtd` | Od początku kwartału | Dni |
| `ytd` | Od początku roku | Dni lub miesiące po 180 dniach |
| `all` | Od utworzenia Twojego obszaru roboczego | Dni lub miesiące po 180 dniach |

Dla niestandardowego zakresu wyślij `start` i opcjonalnie `end`. Zakresy do 2 dni mają przedziały godzinowe, zakresy dłuższe niż 180 dni mają przedziały miesięczne, a wszystkie pośrednie mają przedziały dzienne.

## Filtry wymiarów

Zawęź wyniki do skanowań pasujących do filtra. Różne filtry są łączone przez AND. Gdy filtr przyjmuje kilka wartości, oddziel je przecinkami: wartości są łączone przez OR.

| Filtr | Wartość | Kilka wartości |
| - | - | - |
| `country` | Kod kraju ISO 3166-1 alpha-2, np. `US` | Tak |
| `region` | Kod regionu ISO 3166-2, np. `US-CA` | Tak |
| `city` | Nazwa miasta, np. `New York` | Tak |
| `continent` | `AF`, `AN`, `AS`, `EU`, `NA`, `OC` lub `SA` | Tak |
| `device` | Typ urządzenia, np. `Mobile` lub `Desktop` | Tak |
| `browser` | Nazwa przeglądarki, np. `Chrome` | Tak |
| `os` | System operacyjny, np. `iOS` lub `Windows` | Tak |
| `url` | Docelowy adres URL | Tak |
| `referer` | Strona odsyłająca, np. `google.com` | Nie |
| `utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content` | Wartość UTM, do 190 znaków | Nie |

Nieznany kod kraju lub kontynentu zwraca `422`. Nazwy urządzeń, przeglądarek i systemów są dopasowywane z wielką pierwszą literą, więc `mobile` działa tak samo jak `Mobile`.

Na przykład skanowania z USA lub Kanady na urządzeniach mobilnych: `?country=US,CA&device=Mobile`.

## Podziały

`count` zwraca obiekt. Każda inna wartość zwraca tablicę posortowaną według `clicks` od największej do najmniejszej (`timeseries` jest sortowane według czasu).

| `groupBy` | Każdy element zawiera |
| - | - |
| `count` | `clicks` (obiekt, a nie tablica) |
| `timeseries` | `start` (początek przedziału), `clicks` |
| `continents` | `continent`, `clicks` |
| `regions` | `region`, `country`, `clicks` |
| `countries` | `country`, `city` (zawsze `*`), `clicks` |
| `cities` | `city`, `country`, `clicks` |
| `devices` | `device`, `clicks` |
| `browsers` | `browser`, `clicks` |
| `os` | `os`, `clicks` |
| `triggers` | `trigger` (`qr` lub `link`), `clicks` |
| `referers` | `referer` (`(direct)`, gdy nieznana), `clicks` |
| `referer_urls` | `refererUrl` (`(direct)`, gdy nieznany), `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` | Wartość UTM (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term` lub `utm_content`), `clicks` |

Nieznana wartość `groupBy` zwraca `422` z listą prawidłowych wartości.

Odpowiedź przy `groupBy=count`:

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

Odpowiedź przy `groupBy=countries`:

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

## Analityka kodu QR

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

Zwraca statystyki skanowań jednego kodu QR, ograniczone do jego krótkiego linku. Przyjmuje opisane wyżej [parametry zapytania](#parametry-zapytania) i [filtry wymiarów](#filtry-wymiarów).

**qrId** `string` *required*

ID kodu QR. Weź je z odpowiedzi listy lub tworzenia w [Kodach QR](https://docs.getqr.com/pl/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
}
```

## Analityka obszaru roboczego

`GET /api/v1/analytics`

Zwraca statystyki skanowań wszystkich kodów QR w Twoim obszarze roboczym. Przyjmuje opisane wyżej [parametry zapytania](#parametry-zapytania) i [filtry wymiarów](#filtry-wymiarów) oraz poniższe parametry zawężające.

**domain** `string`

Razem z `key` ogranicza wyniki do krótkiego linku w tej domenie, np. `getqr.sh`. Domena musi należeć do Twojego obszaru roboczego.

**key** `string`

Slug krótkiego linku, np. `x7Kd2p1`. Używaj go razem z `domain`. Oba znajdziesz w [obiekcie kodu QR](https://docs.getqr.com/pl/api/endpoints/qr-codes.md).

**qrType** `string`

Typy kodów QR do uwzględnienia, oddzielone przecinkami: `website`, `pdf`, `image`, `video`, `whatsapp`, `social`, `wifi`, `app`, `feedback`, `vcard`, `sms`, `payment`, `location`, `multilink`, `email` lub `event`. Zobacz [Typy kodów QR](https://docs.getqr.com/pl/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 }
]
```

## Typowe problemy

> [accordion] 400 "QR has no associated link."
>
> Kod QR nie ma krótkiego linku, więc nie ma skanowań do policzenia.

> [accordion] 404 przy filtrowaniu według domain i key
>
> W Twoim obszarze roboczym nie istnieje krótki link z tą domeną i slugiem. Skopiuj `domain` i `key` z obiektu kodu QR.

> [accordion] 422 przy groupBy, interval lub filtrze
>
> Ta wartość nie jest obsługiwana. Komunikat błędu podaje nazwę parametru i listę prawidłowych wartości.

> [accordion] Liczby nie zgadzają się z panelem
>
> Sprawdź, czy używasz tego samego zakresu dat i strefy czasowej oraz czy liczysz unikalne skanowania (`unique=true`), czy łączną liczbę skanowań.

## Co dalej

> [card] [Raporty](https://docs.getqr.com/pl/api/endpoints/reports.md)

> [card] [Kody QR](https://docs.getqr.com/pl/api/endpoints/qr-codes.md)

> [card] [Analityka w aplikacji](https://docs.getqr.com/pl/analytics/overview.md)

> [card] [Limity żądań](https://docs.getqr.com/pl/api/rate-limits.md)


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