--- title: "AI Overviews: konkurenci (`getCompetitors`)" source: https://docs.senuto.com/modules/visibility_analysis/va-ai-overviews-getCompetitors api: POST /api/visibility_analysis/reports/ai_overviews/getCompetitors --- # AI Overviews: konkurenci (`getCompetitors`) **`POST /api/visibility_analysis/reports/ai_overviews/getCompetitors`** > **Ostrzeżenie:** > **Endpoint przestarzały.** Działa, ale może nie być aktywnie utrzymywany i w przyszłości zostać wycofany lub zastąpiony. Planuj integrację z ostrożnością. Aktualne odpowiedniki raportów AI Overviews per projekt znajdziesz w module **Monitoring** (`rank_tracker/reports/ai_overviews`). Zwraca listę **konkurentów domeny w blokach AI Overviews (AIO)** Google — czyli inne domeny, które pojawiają się jako cytowane źródła w AI Overviews dla zapytań istotnych dla analizowanej domeny. Raport pozwala ocenić, kto konkuruje z Twoją domeną o obecność w odpowiedziach generowanych przez AI. --- ## Żądanie `POST` `/api/visibility_analysis/reports/ai_overviews/getCompetitors` Parametry przesyłasz w **treści żądania jako JSON**. Nagłówki: `Authorization: Bearer ` oraz `Content-Type: application/json`. ### Struktura żądania **Podstawowy** ```jsonc filename="żądanie-podstawowe.jsonc" { "domain": "zalando.pl", "fetch_mode": "topLevelDomain", "country_id": 1 } ``` **Rozszerzony** ```jsonc filename="żądanie-rozszerzone.jsonc" { "domain": "zalando.pl", "fetch_mode": "topLevelDomain", "country_id": 1, "page": 1, "limit": 2 } ``` **cURL** ```bash curl --location --request POST 'https://api.senuto.com/api/visibility_analysis/reports/ai_overviews/getCompetitors' \ --header 'Authorization: Bearer $YOUR_TOKEN_HERE' \ --header 'Content-Type: application/json' \ --data '{"domain":"zalando.pl","fetch_mode":"topLevelDomain","country_id":1,"limit":2}' ``` ### Parametry ```ts type AiOverviewsGetCompetitorsRequest = { /** * **Wymagane**. Domena, subdomena, katalog lub URL do analizy — interpretowane zgodnie z `fetch_mode`. * Bez schematu/protokołu — np. `zalando.pl`. */ domain: string; /** * **Wymagane**. Sposób interpretacji `domain`. * Uwaga: `domain` NIE jest prawidłową wartością — dla całej domeny użyj `topLevelDomain`. * - `topLevelDomain` — cała domena (najczęstszy przypadek) * - `subdomain` — pojedyncza subdomena * - `catalog` — ścieżka/katalog * - `url` — dokładny adres URL */ fetch_mode: 'topLevelDomain' | 'subdomain' | 'catalog' | 'url'; /** * Identyfikator kraju (baza Google). Opcjonalne — walidator tej akcji nie wymusza pola; * gdy pominięte, backend stosuje domyślny kraj (PL). * @default 1 */ country_id?: number; /** * Numer strony wyników. Opcjonalne. * @default 1 */ page?: number; /** * Maksymalna liczba wyników na stronę. Opcjonalne. */ limit?: number; } export default AiOverviewsGetCompetitorsRequest ``` > **Ostrzeżenie:** > Dozwolone wartości `fetch_mode` to dokładnie `topLevelDomain`, `subdomain`, `catalog` i `url` — przekazanie `domain` nie przechodzi walidacji. > **Ostrzeżenie:** > Domena bez danych AI Overviews zwraca `200` z **pustą tablicą** `data` — to nie błąd, tylko brak wyników dla tej domeny. ## Odpowiedź W przypadku powodzenia otrzymujesz `success: true`, `data` — tablicę obiektów konkurentów w AI Overviews — oraz obiekt `pagination` z informacjami o stronicowaniu. Gdy dla danej domeny brak danych AIO, `data` jest pustą tablicą (`[]`), a liczniki paginacji wskazują zero wyników. Tak właśnie odpowiedziała domena testowa `zalando.pl` — `200` z pustą tablicą. **Skrócona** ```json filename="przykładowa-odpowiedź (skrócona)" { "success": true, "data": [] } ``` **Pełna** ```json filename="przykładowa-odpowiedź (200)" { "success": true, "data": [], "pagination": { "page_count": 0, "current_page": 1, "has_next_page": false, "has_prev_page": false, "count": 0, "limit": 2 } } ``` > **Ostrzeżenie:** > Dla domen, które nie mają danych AI Overviews, `data` jest **pustą tablicą** — to nie błąd, tylko brak wyników dla tej domeny. Poniżej opisana jest koperta odpowiedzi. ### Struktura odpowiedzi ```ts type AiOverviewsCompetitorsResponse = { /** Flaga przetworzenia żądania. Potwierdzone (`true`) w odpowiedzi `200`. */ success: boolean; /** * Tablica obiektów konkurentów w AI Overviews. * Pusta tablica (`[]`), gdy domena nie ma danych AIO. */ data: unknown[]; /** Informacje o stronicowaniu wyników. Potwierdzone w odpowiedzi `200`. */ pagination: { /** Łączna liczba stron wyników. */ page_count: number; /** Numer bieżącej strony. */ current_page: number; /** Czy istnieje następna strona. */ has_next_page: boolean; /** Czy istnieje poprzednia strona. */ has_prev_page: boolean; /** Łączna liczba wyników. */ count: number; /** Limit wyników na stronę (odzwierciedla przekazany `limit`). */ limit: number; }; } export default AiOverviewsCompetitorsResponse ``` ## 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:** > Błędy walidacji (np. brak wymaganego `domain` lub `fetch_mode`, albo nieprawidłowa wartość `fetch_mode`) zwracane są ze statusem **`418`** i kopertą `invalid_data` z mapą `params` wskazującą pole i naruszoną regułę. ## Powiązane akcje Wszystkie poniższe akcje są przestarzałe: - `getStatistics` — zbiorcze statystyki AI Overviews dla domeny - `getKeywords` — słowa kluczowe wywołujące AI Overviews - `getDistribution` — rozkład obecności domeny w AI Overviews - `getCompetitors` — konkurenci domeny w AI Overviews (ta strona) - `getKeywordResults` — wyniki AI Overviews dla pojedynczej frazy - `getKeywordsIntents` — agregacja fraz AIO według intencji - `getOpportunities` — frazy-szanse: domena rankuje organicznie, ale nie jest w AIO Aktualne odpowiedniki raportów AI Overviews **per projekt** znajdziesz w module **Monitoring** (`rank_tracker/reports/ai_overviews`).