Konkurenci: ranking (getRanking)
/api/rank_tracker/reports/competitors/getRankingZwraca ranking domeny projektu oraz jej konkurentów według statystyk pozycji i widoczności — porównanie dwóch snapshotów pomiarowych. Dla każdej domeny otrzymujesz zestaw około 26 metryk (rozkład pozycji TOP3/TOP10/TOP50, widoczność organiczna, potencjał, budżet itd.), a każda metryka zawiera wartość starszą, nowszą, różnicę i zmianę procentową. Wynik jest stronicowany po domenach.
| Domena | ID | Domena projektu | Widoczność org. | Średnia pozycja | TOP3 |
|---|---|---|---|---|---|
| pies.pl | 87944 | tak | 0 | 50 | 0 |
| fajnyzwierzak.pl | 55578 | — | — | 45,99 | — |
wiersze z data.data — podwójna koperta: domena projektu (project_domain: true) i konkurent. Pokazano identyfikatory i najważniejsze metryki (recent_value); komplet ~24 metryk (starsza/nowsza/różnica/%) jest w JSON i sekcji „Struktura odpowiedzi”.
Żądanie
POST /api/rank_tracker/reports/competitors/getRanking
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. Początek zakresu porównania w formacie | |
date_max | stringWymagane. Koniec zakresu porównania w formacie | |
limit | numberRozmiar strony paginacji — liczonej po domenach (projekt + konkurenci). | 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:
- Podwójna koperta — zewnętrzne pole
datazawiera własny obiekt z polami{success, rows, dates, data[]}. Lista domen siedzi więc wdata.data, a nie bezpośrednio wdata. datespokazuje faktycznie porównane snapshoty, a nie Twój zakres.last_dateodpowiadadate_max, aleprevious_datato poprzedni dostępny pomiar — w zwalidowanym przykładzie2026-06-28, mimo że w żądaniu podanodate_min: 2026-06-20. Każde z pól to obiekt{timestamp, formatted}.- Wiersz domeny projektu różni się od wierszy konkurentów — ma
project_domain: trueiselectable: false, natomiast wiersze konkurentów mają zamiast tego tablicecategories[]itechnologies[]. - Duplikaty i równoległe konwencje w
statistics— metrykiout_50iout50występują jednocześnie, podobnie jak przedziały w dwóch notacjach (top3/top4_10/top11_20/top21_50obok1_3/4_10/11_20/21_50). - Paginacja działa na poziomie zewnętrznym i liczy domeny (
count: 4= domena projektu + 3 konkurentów), a nie frazy.
Odpowiedź
Zwróć uwagę na podwójną kopertę: zewnętrzne data to obiekt z własnymi polami success, rows (łączna liczba domen), dates (faktycznie porównane snapshoty) i data (lista domen). Metadane pagination leżą na poziomie zewnętrznym, obok koperty. W skróconym przykładzie poniżej drugi wiersz (konkurent) pokazuje tylko część metryk — w oryginalnej odpowiedzi każdy wiersz zawiera komplet tych samych około 26 metryk co wiersz domeny projektu, każda w formacie {older_value, recent_value, diff, percent}.
Skrócona
{
"success": true,
"data": {
"success": true,
"rows": 4,
"dates": {
"last_date": { "timestamp": 1782691200, "formatted": "2026-06-29" },
"previous_data": { "timestamp": 1782604800, "formatted": "2026-06-28" }
},
"data": [
{
"id": 87944,
"domain": "pies.pl",
"project_domain": true,
"selectable": false,
"statistics": {
"organic_potential": { "older_value": 1100.0399999999984, "recent_value": 1100.0399999999984, "diff": 0, "percent": 0 },
"avg_pos": { "older_value": 50, "recent_value": 50, "diff": 0, "percent": 0 },
"out_50": { "older_value": 94, "recent_value": 94, "diff": 0, "percent": 0 }
}
}
]
},
"pagination": { "page_count": 2, "current_page": 1, "has_next_page": true, "has_prev_page": false, "count": 4, "limit": 2 }
}Struktura odpowiedzi
| Name | Type | Default |
|---|---|---|
success | booleanFlaga przetworzenia żądania (poziom zewnętrzny) | |
data | { success: boolean; rows: number; dates: { last_date: SnapshotDate; previous_data: SnapshotDate; }; data: RankingRow[]; }Wewnętrzna koperta — uwaga na podwójne zagnieżdżenie | |
pagination | { page_count: number; current_page: number; has_next_page: boolean; has_prev_page: boolean; count: number; limit: number | null; }Paginacja na poziomie zewnętrznym; |
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
getRanking— ranking domen wg statystyk pozycji/widoczności dla dwóch snapshotów (ta strona)getMatrix— macierz fraza × domena z pozycjami projektu i konkurentów w dwóch datach (POST, te same wymagane parametry)- Lista konkurentów projektu (domeny widoczne w obu raportach) pochodzi z
GET /api/rank_tracker/management/competitors/list