Dokumentacja /

Dokumentacja API

Skrót kontraktu REST: uwierzytelnianie, limity, pola świeżości, endpointy i błędy.

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.

bash · header
Authorization: Bearer YOUR_KEY
X-RateLimit-Remaining: 9999
X-RateLimit-Reset: 1788220800

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

GET /v1/latest[/{BASE}]Bieżące kursy, wszystkie lub filtrowane przez symbols.
GET /v1/{YYYY-MM-DD}[/{BASE}]Migawka historyczna dla daty i waluty bazowej.
GET /v1/convert/{FROM}/{TO}[/{AMOUNT}] · POST /v1/convertPrzeliczenie kwoty; pojedynczy GET lub grupowy POST.
GET /v1/rate/{slug}Płaska odpowiedź dla pary podanej jako slug.
GET /v1/rangeSeria dzienna z paginacją i pobieraniem plików.
GET /v1/currenciesLista obsługiwanych walut, bez parametrów.
GET /v1/accountKonto, plan, aktywny klucz i użycie w miesiącu.

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.

intervalUnikalne pary
1m91
5m91
15m91
1h91
4h79
1d465
curl · EUR/JPY · 15m
curl "https://api.exchangerate.dev/v1/timeseries?base=EUR&symbols=JPY&interval=15m&from=2026-09-14T12:00:00Z&to=2026-09-14T13:00:00Z"

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

Szczegóły zakresu i limitów

API kursów intraday

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

PlanJednoczesne połączeniaPary na połączenie
Free00
Basic00
Pro00
Realtime10100
JSON · auth
{"action":"auth","api_key":"YOUR_KEY"}
JSON · subscribe
{"action":"subscribe","base":"EUR","symbols":["USD","JPY"]}

WebSocket na żywo

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.

json · error
{
  "result": "error",
  "code": "missing_parameter",
  "message": "missing required parameter: symbols"
}

Dokumentacja API →

Użyj z wybranym stosem

To samo żądanie działa z curl, Pythonem i JavaScriptem. Do testów nie potrzebujesz klucza API.

Otwórz szybki start
curl -fsS --max-time 10 "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP"
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.

Otwórz odpowiedź JSONDokumentacja API