📋 Spis treści
🚀 Wprowadzenie
OpenData API zapewnia dostęp do otwartych danych kolejowych. API umożliwia pobieranie informacji o:
- 📍 Stacjach kolejowych
- 🚆 Rozkładach jazdy (planowych)
- ⏰ Bieżących danych z wykonania (real-time)
- 🚧 Utrudnieniach w ruchu
ℹ️ Informacja: Aby korzystać z API, potrzebujesz klucza API. Złóż wniosek o klucz na stronie głównej.
Base URL
🌐 Wersjonowanie: API używa wersjonowania w URL. Aktualna wersja to v1. Można również użyć nagłówka X-Api-Version: 1.0 lub parametru ?api-version=1.0
Format odpowiedzi
Wszystkie odpowiedzi są w formacie JSON. Standardowa struktura odpowiedzi:
🔐 Autoryzacja
API wymaga autoryzacji za pomocą klucza API. Klucz można przekazać na trzy sposoby:
1. Header X-API-Key (zalecane)
2. Authorization Bearer
3. Authorization ApiKey
⚠️ Ważne: Nie udostępniaj swojego klucza API publicznie. Przechowuj go bezpiecznie jako zmienną środowiskową lub w konfiguracji.
📡 Główne Endpoints
🚆 Rozkłady i Wykonanie
Zwraca rozkład planowy dla podanych stacji i przedziału dat.
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
| dateFrom | date | Nie | Data początkowa (YYYY-MM-DD). Domyślnie: dzisiaj |
| dateTo | date | Nie | Data końcowa (max 31 dni). Domyślnie: dzisiaj |
| stations | string | Nie | Lista ID stacji oddzielonych przecinkami (np. "33506,33512"). Domyślnie: wszystkie stacje |
| carriersInclude | string | Nie | Lista przewoźników do uwzględnienia (np. "IC,KM"). Zobacz /dictionaries/carriers |
| carriersExclude | string | Nie | Lista przewoźników do wykluczenia. Zobacz /dictionaries/carriers |
Zwraca informacje o bieżących realizacjach pociągów z opóźnieniami.
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
| stations | string | Nie | Lista ID stacji oddzielonych przecinkami. Domyślnie: wszystkie stacje |
| carriersInclude | string | Nie | Lista przewoźników do uwzględnienia |
| carriersExclude | string | Nie | Lista przewoźników do wykluczenia |
Zwraca informacje o aktualnych utrudnieniach w ruchu kolejowym.
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
| dateFrom | date | Nie | Data początkowa. Domyślnie: dzisiaj |
| dateTo | date | Nie | Data końcowa (max 31 dni). Domyślnie: dzisiaj |
| stations | string | Nie | Lista ID stacji. Domyślnie: wszystkie stacje |
📚 Słowniki danych
Zwraca listę wszystkich przewoźników z ich kodami (skrótami) używanymi w parametrach carriersInclude i carriersExclude.
💡 Przykładowe kody przewoźników: IC (PKP Intercity), KM (Koleje Mazowieckie), KS (Koleje Śląskie), KD (Koleje Dolnośląskie)
Zwraca listę stacji z ich ID używanymi w parametrze stations.
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
| search | string | Nie | Wyszukiwanie po nazwie stacji (max 500 wyników) |
Zwraca listę kategorii handlowych pociągów.
Zwraca listę typów postójów na stacjach.
🔍 Diagnostyka
Zwraca informacje o ostatnich importach danych (rozkład i wykonanie).
Sprawdza status API (nie wymaga autoryzacji).
🔑 Zarządzanie kluczem API
⚡ Limity zapytań
API implementuje limity zapytań aby zapewnić stabilność usługi i chronić przed nadużyciami. Limity są przyznawane na podstawie wybranego poziomu podczas składania wniosku o klucz API:
| Poziom dostępu | Limit godzinowy | Limit dzienny | Przeznaczenie |
|---|---|---|---|
| Basic | 100 | 1 000 | Deweloperzy, testy, małe projekty hobbystyczne |
| Standard | 500 | 5 000 | Małe i średnie aplikacje mobilne |
| Premium | 2 000 | 20 000 | Tablice informacyjne, większe integracje |
📊 Przykłady użycia:
- Basic (~1-2 req/min) - sprawdzanie opóźnień dla 1-2 stacji co kilka minut
- Standard (~8 req/min) - aplikacja mobilna odświeżająca dane dla kilku użytkowników
- Premium (~33 req/min) - tablica informacyjna odświeżająca co 2-3 sekundy
💡 Wskazówka: Monitoruj nagłówki odpowiedzi aby śledzić pozostałe limity:
X-RateLimit-Hourly-Remaining - pozostałe zapytania w tej godzinie
X-RateLimit-Daily-Remaining - pozostałe zapytania dzisiaj
⚠️ Uwaga: Po przekroczeniu limitu otrzymasz odpowiedź z kodem HTTP 429 (Too Many Requests). Poczekaj do resetu limitu lub rozważ upgrade do wyższego poziomu.
💡 Przykłady użycia
📅 Pobieranie rozkładu planowego
Wszystkie parametry są opcjonalne. Bez parametrów zwraca rozkład na dzisiaj dla wszystkich stacji:
⏰ Sprawdzanie realizacji pociągów (real-time)
Bez parametru stations zwraca dane dla wszystkich stacji:
🚧 Pobieranie utrudnień
Bez parametrów zwraca utrudnienia na dzisiaj dla wszystkich stacji:
🌐 JavaScript/Fetch
🐍 Python/Requests
❌ Obsługa błędów
API zwraca standardowe kody błędów HTTP wraz z opisem w JSON:
| Kod HTTP | Znaczenie | Przykład |
|---|---|---|
| 400 | Bad Request | Nieprawidłowe parametry zapytania |
| 401 | Unauthorized | Brak lub nieprawidłowy klucz API |
| 403 | Forbidden | Brak uprawnień do zasobu |
| 404 | Not Found | Zasób nie został znaleziony |
| 429 | Too Many Requests | Przekroczono limit zapytań |
| 500 | Internal Server Error | Błąd serwera |
Przykład odpowiedzi błędu:
⚠️ Wskazówki dotyczące obsługi błędów:
- Implementuj retry logic dla błędów 5xx
- Respektuj limity zapytań (429)
- Waliduj dane przed wysłaniem (400)
- Przechowuj klucz API bezpiecznie (401)
📞 Kontakt i wsparcie
W przypadku pytań lub problemów z API:
- 📧 Email: pdp-api@plk-sa.pl
- 📋 Interaktywna dokumentacja: Swagger UI | Scalar
- 🔑 Klucz API: Wniosek na stronie głównej
📈 Feedback: Twoje opinie pomagają nam ulepszać API. Podziel się swoimi doświadczeniami!