--- title: "Dashboard: statystyki domeny (`getDomainStatistics`)" source: https://docs.senuto.com/modules/visibility_analysis/va-dashboard-getDomainStatistics api: GET /api/visibility_analysis/reports/dashboard/getDomainStatistics --- # Dashboard: statystyki domeny (`getDomainStatistics`) **`GET /api/visibility_analysis/reports/dashboard/getDomainStatistics`** Zwraca kluczowe metryki widoczności dla domeny (TOP3 / TOP10, widoczność całkowita, ranking domeny, wartość ekwiwalentu reklamowego, wiodąca kategoria oraz słowa kluczowe AI Overviews), każdą jako porównanie ostatniego okresu z poprzednim. --- ## Żądanie `GET` `/api/visibility_analysis/reports/dashboard/getDomainStatistics` Parametry są odczytywane z **query string** (`getQuery`). Nagłówki: `Authorization: Bearer `. ### Struktura żądania **Podstawowy** ```jsonc filename="żądanie-podstawowe.jsonc" // Query string parameters { "domain": "zalando.pl", "fetch_mode": "topLevelDomain" } // GET /api/visibility_analysis/reports/dashboard/getDomainStatistics?domain=zalando.pl&fetch_mode=topLevelDomain ``` **Rozszerzony** ```jsonc filename="żądanie-rozszerzone.jsonc" // Query string parameters { "domain": "zalando.pl", "fetch_mode": "topLevelDomain", "country_id": 1 } // GET /api/visibility_analysis/reports/dashboard/getDomainStatistics?domain=zalando.pl&fetch_mode=topLevelDomain&country_id=1 ``` **cURL** ```bash curl --location --request GET 'https://api.senuto.com/api/visibility_analysis/reports/dashboard/getDomainStatistics?domain=zalando.pl&fetch_mode=topLevelDomain' \ --header 'Authorization: Bearer $YOUR_TOKEN_HERE' ``` ### Parametry ```ts type DashboardGetDomainStatisticsRequest = { /** * **Wymagane**. Domena lub subdomena do analizy, walidowana po stronie API. * Bez schematu/protokołu — np. `zalando.pl`. */ domain: string; /** * **Wymagane**. Tryb agregacji danych o widoczności. * Uwaga: `domain` NIE jest prawidłową wartością — dla całej domeny użyj `topLevelDomain`. * - `topLevelDomain` — cała domena (typowy przypadek) * - `subdomain` — pojedyncza subdomena * - `catalog` — ścieżka/katalog * - `url` — dokładny adres URL */ fetch_mode: 'topLevelDomain' | 'subdomain' | 'catalog' | 'url'; /** * Identyfikator kraju (baza Google). Opcjonalne — gdy jest pominięte, `0` lub nieprawidłowe, * backend stosuje domyślny kraj (PL). * @default 1 */ country_id?: number; } export default DashboardGetDomainStatisticsRequest ``` > **Ostrzeżenie:** > Dozwolone wartości `fetch_mode` to dokładnie `['topLevelDomain', 'subdomain', 'catalog', 'url']` (`DataFetchMode::AVAILABLE_MODES`). Przekazanie `domain` to częsty błąd — nie odpowiada żadnemu trybowi i nie przechodzi walidacji. > **Ostrzeżenie:** > Ta akcja odczytuje dane z **query string** (kontroler używa `getQuery`), więc parametry przesyłaj w adresie URL — wysłanie ich wyłącznie w treści JSON zwraca `418`. Zarówno **`domain`**, jak i **`fetch_mode`** są **wymagane**. Wartość `fetch_mode` **`domain` nie istnieje** — dla całej domeny użyj **`topLevelDomain`**. `country_id` jest opcjonalne i domyślnie przyjmuje **PL (`1`)**, gdy jest pominięte lub nieprawidłowe. ## Odpowiedź W przypadku powodzenia otrzymujesz `data.statistics` — pojedynczy obiekt zawierający 9 metryk. Każda metryka to porównanie `recent_value` z `older_value` (bieżący okres vs poprzedni) wraz z bezwzględną różnicą `diff` oraz ułamkowym `percent` (np. `-0.0011` = `-0.11%`). Nie ma paginacji — to obiekt statystyk, a nie lista. `category` jest zagnieżdżona jako `{ name, statistics }`. **Skrócona** ```json filename="przykładowa-odpowiedź (skrócona)" { "success": true, "data": { "statistics": { "visibility": { "recent_value": 5423828, "older_value": 5433671, "diff": -9843, "percent": -0.0018 }, "top3": { "recent_value": 46546, "older_value": 46595, "diff": -49, "percent": -0.0011 } /* … top10, domain_rank, ads_equivalent, category, aio_keywords, aio_visible_keywords */ } } } ``` **Pełna** ```json filename="przykładowa-odpowiedź (200)" { "success": true, "data": { "statistics": { "top3": { "recent_value": 46546, "older_value": 46595, "diff": -49, "percent": -0.0011 }, "top10": { "recent_value": 114215, "older_value": 114263, "diff": -48, "percent": -0.0004 }, "visibility": { "recent_value": 5423828, "older_value": 5433671, "diff": -9843, "percent": -0.0018 }, "domain_rank": { "recent_value": 103, "older_value": 103, "diff": 0, "percent": 0 }, "ads_equivalent": { "recent_value": 13282982.37, "older_value": 15171821.56, "diff": -1888839.19, "percent": -0.1245 }, "category": { "name": "Styl i moda", "statistics": { "recent_value": 9, "older_value": 9, "diff": 0, "percent": 0 } }, "aio_keywords": { "recent_value": 12721, "older_value": 12721, "diff": 0, "percent": 0 }, "aio_visible_keywords": { "recent_value": 0, "older_value": 0, "diff": 0, "percent": 0 } } } } ``` ### Struktura odpowiedzi ```ts type DashboardStatisticsResponse = { /** `true` przy powodzeniu; przy błędzie `false` i koperta z `error` */ success: boolean; data: { statistics: { /** Słowa kluczowe w TOP3 */ top3: Metric; /** Słowa kluczowe w TOP10 */ top10: Metric; /** Całkowita szacowana widoczność (ruch) */ visibility: Metric; /** Pozycja w rankingu domen */ domain_rank: Metric; /** Wartość ekwiwalentu reklamowego ruchu organicznego, w PLN */ ads_equivalent: Metric; /** Wiodąca kategoria, z własną metryką */ category: { name: string; statistics: Metric }; /** Słowa kluczowe wywołujące AI Overviews */ aio_keywords: Metric; /** Słowa kluczowe, dla których domena jest widoczna w AI Overviews */ aio_visible_keywords: Metric; }; }; } /** Porównanie ostatniego okresu z poprzednim. `percent` to ułamek, np. -0.0011 = -0.11%. */ type Metric = { recent_value: number; older_value: number; diff: number; percent: number; } export default DashboardStatisticsResponse ``` ## Błędy ```ts type ErrorResponse = { success: false; data: { error: { /** np. invalid_data, unreachable_data, timeout, database, unknown */ type: string; message: string; /** pole -> reguła -> komunikat (dla invalid_data) */ params?: Record>; }; }; } export default ErrorResponse ``` > **Błąd:** > **`418`** jest zwracane także dla błędów walidacji — nie tylko przy ograniczaniu liczby żądań. Najczęstsze przyczyny to przesłanie parametrów w treści JSON zamiast w query string (przez co `getQuery` jest puste) oraz pominięcie `fetch_mode`. Brakujące `fetch_mode` → > `{"success":false,"data":{"error":{"type":"invalid_data","params":{"fetch_mode":{"_required":"This field is required"}}}}}`. ## Powiązane akcje - `getDomainStatistics` — kluczowe statystyki domeny (ta strona) - `getData` (Positions) — pozycje na poziomie słów kluczowych, stojące za tymi zagregowanymi danymi (ten sam kształt `domain` + `fetch_mode`) - `getDomainStatistics` dla innego `fetch_mode` — przekaż `subdomain`, `catalog` lub `url`, aby ograniczyć te same metryki do subdomeny, ścieżki lub dokładnego adresu URL