Konkurenci: macierz pozycji (getMatrix)
/api/rank_tracker/reports/competitors/getMatrixZwraca macierz fraza × domena: dla każdej frazy monitorowanej w projekcie Rank Tracker otrzymujesz pozycje domeny projektu oraz wszystkich jej konkurentów w dwóch datach (date_min i date_max). Oprócz pozycji każdy wiersz zawiera podstawowe metryki frazy (widoczność, potencjał, CPC, liczbę wyszukiwań, snippety SERP). Wynik jest stronicowany po frazach.
Żądanie
POST /api/rank_tracker/reports/competitors/getMatrix
Nagłówki: Authorization: Bearer <token>, Content-Type: application/json.
Struktura żądania
Podstawowy
{
"project_id": null,
"date_min": "2026-06-20",
"date_max": "2026-06-29"
}Parametry
| Name | Type | Default |
|---|---|---|
project_id | numberWymagane (walidator | |
date_min | stringWymagane. Starsza z dwóch porównywanych dat w formacie | |
date_max | stringWymagane. Nowsza z dwóch porównywanych dat w formacie | |
filtering | { filters: { key: string; match?: "gt" | "gte" | "lt" | "lte" | "eq"; value: string | number | (string | number)[]; complement?: boolean; }[]; conjunction?: "and" | "or"; }[]Filtrowanie po frazach macierzy. Dozwolone klucze m.in.: | |
limit | numberRozmiar strony paginacji — liczonej po frazach. | 10 |
page | numberNumer strony paginacji. | 1 |
Znany bug walidatora: gdy date_min jest późniejsze niż date_max, komunikaty błędów z DateRangeRules są odwrócone (komunikat o date_min dotyczy date_max i odwrotnie). Interpretuj wtedy błąd „na krzyż”.
Pułapki tego endpointu:
- Klucze dynamiczne — każdy wiersz ma po jednym polu na każdą domenę (np.
"pies.pl","psy.pl","wamiz.pl","fajnyzwierzak.pl"). Wartością jest mapa data → snapshot: pod kluczemdate_minznajdziesz tylko{position}, a pod kluczemdate_max—{position, has_changes, is_grown, diff}, przy czymis_grownpojawia się tylko gdyhas_changes: true. Nie da się więc zdeserializować wiersza do sztywnego typu — użyj mapy. position: 0oznacza brak domeny w TOP50 dla danej frazy — to nie jest pozycja pierwsza ani błąd.searchesto string (np."30"), a nie liczba — dotyczy to zarówno pola na poziomie wiersza, jak istatistics.searches.current.status: "complete"oznacza, że fraza została w pełni przetworzona dla porównywanych dat.- Paginacja liczona jest po frazach (
count: 94= liczba fraz w projekcie), inaczej niż wgetRanking, gdzie liczy domeny.
Odpowiedź
data to tablica wierszy — po jednym na frazę. Każdy wiersz łączy stałe pola frazy (keyword, status, searches, snippets, metryki) z dynamicznymi kluczami domen: domena projektu i każdy konkurent to osobne pole, którego nazwa jest nazwą domeny, a wartość — mapą data → snapshot pozycji. Pamiętaj, że position: 0 oznacza brak w TOP50, a searches jest stringiem.
Skrócona
{
"success": true,
"data": [
{
"keyword": "ridgeback tajski",
"status": "complete",
"searches": "30",
"pies.pl": {
"2026-06-20": { "position": 0 },
"2026-06-29": { "position": 0, "has_changes": false, "diff": 0 }
},
"psy.pl": {
"2026-06-20": { "position": 2 },
"2026-06-29": { "position": 10, "has_changes": true, "is_grown": false, "diff": 8 }
}
}
],
"pagination": { "page_count": 47, "current_page": 1, "has_next_page": true, "has_prev_page": false, "count": 94, "limit": 2 }
}Struktura odpowiedzi
| Name | Type | Default |
|---|---|---|
success | boolean
| |
data | MatrixRow[]Wiersze macierzy — jeden na frazę | |
pagination | { page_count: number; current_page: number; has_next_page: boolean; has_prev_page: boolean; count: number; limit: number | null; }Paginacja liczona po frazach ( |
Błędy
| Name | Type | Default |
|---|---|---|
success | false | |
data | { error: { type: string; message: string; params?: Record<string, Record<string, string>>; }; } |
Błędy walidacji zwracane są jako 418. Brak project_id, date_min lub date_max → invalid_data. Daty muszą być w formacie YYYY-MM-DD, nie późniejsze niż dziś, a date_min ≤ date_max — przy odwróconym zakresie pamiętaj o zamienionych komunikatach z DateRangeRules. Cudzy lub nieistniejący project_id → 418 z Unauthorized access, a nie 404.
Powiązane akcje
getMatrix— macierz fraza × domena z pozycjami projektu i konkurentów w dwóch datach (ta strona)getRanking— ranking domen wg statystyk pozycji/widoczności dla dwóch snapshotów (POST, te same wymagane parametry)- Lista konkurentów projektu (domeny widoczne w obu raportach) pochodzi z
GET /api/rank_tracker/management/competitors/list