Uwierzytelnianie i limity
Endpointy danych można testować anonimowo: 12 żądań na minutę i 100 na godzinę dla jednego IP. Klucz uruchamia miesięczny limit konta.
Pola opisujące świeżość
`source` określa klasę źródła, `market_session` stan rynku, a `data_updated_at` czas najstarszej obserwacji uwzględnionej w odpowiedzi. Zachowaj wszystkie trzy.
Endpointy
Serie intraday i zakres
/v1/timeseries obsługuje 1m, 5m, 15m, 1h, 4h oraz dzienne dane referencyjne 1d. Nie ma interwału 2h. Krzyżowe pary SGD bez USD nie obsługują 4h; USD/SGD i odwrotny kierunek są dostępne. Zbieranie danych rynkowych rozpoczęło się 2026-09-14. Dane 1m są przechowywane przez 30 dni, a większe interwały nie mają zaplanowanego terminu usunięcia. Retencja nie oznacza już zgromadzonej długości historii.
Historyczne pary krzyżowe wymagają rzeczywistych obserwacji zamknięcia w tym samym przedziale UTC, oddalonych o najwyżej 5 sekund. effective_at wskazuje starszą obserwację. Luki nie są wypełniane; otwarty przedział może się zmieniać. 1d korzysta z dziennych danych referencyjnych całego katalogu. Tabela liczy unikalne pary; oba kierunki są obsługiwane.
| interval | Unikalne pary |
|---|---|
1m | 91 |
5m | 91 |
15m | 91 |
1h | 91 |
4h | 79 |
1d | 465 |
Obsługiwane okno bez obserwacji zwraca HTTP 200 z data: [], has_more: false i next_cursor: null. Nieznany interwał zwraca unsupported_interval; para poza zakresem zwraca unsupported_pair_interval i rejected_pairs (HTTP 400). Żądania mieszane są odrzucane w całości.
AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR
WebSocket na żywo
Połącz się z wss://api.exchangerate.dev/v1/stream i wyślij auth w ciągu 10 sekund. Przechowuj klucz na serwerze, nigdy w URL ani publicznym JavaScript. Połączenia anonimowe nie są obsługiwane. Po authenticated wyślij subscribe. Obsługiwane waluty podano poniżej; pary krzyżowe wymagają dwóch świeżych obserwacji oddalonych o najwyżej 5 sekund. Możliwe stany to unavailable i stale. Każde przyjęte połączenie zużywa jedną jednostkę miesięcznego limitu.
Tabela przedstawia limity nowych kont. Istniejące konta zachowują Free 1 × 5, Basic 3 × 25 lub Pro 10 × 100 (połączenia × pary na połączenie). Komunikat authenticated podaje obowiązujące limity konta.
AUD, CAD, CHF, EUR, GBP, JPY, MXN, NOK, NZD, PLN, SEK, SGD, USD, ZAR
| Plan | Jednoczesne połączenia | Pary na połączenie |
|---|---|---|
| Free | 0 | 0 |
| Basic | 0 | 0 |
| Pro | 0 | 0 |
| Realtime | 10 | 100 |
Błędy
REST: Każdy błąd ma postać `{ result: "error", code, message }`. Odpowiedź 429 zawiera `Retry-After`; awaria źródła nigdy nie uruchamia danych testowych.
Użyj z wybranym stosem
To samo żądanie działa z curl, Pythonem i JavaScriptem. Do testów nie potrzebujesz klucza API.
Przykładowa odpowiedź
{
"result": "success",
"base": "USD",
"source": "live",
"sources": {
"EUR": "live",
"GBP": "live"
},
"market_session": "open",
"timestamp": "2026-06-15T12:00:00Z",
"data_updated_at": "2026-06-15T12:00:00Z",
"effective_at": {
"EUR": "2026-06-15T12:00:00Z",
"GBP": "2026-06-15T12:00:00Z"
},
"rates": {
"EUR": 0.86207,
"GBP": 0.74627
},
"derived_symbols": [],
"notice": "Indicative rates, not for settlement."
}rates.EUR to liczba EUR za 1 USD. effective_at.EUR oznacza czas obserwacji, a sources.EUR klasę źródła. Wartości i czasy są przykładowe.