Frankfurter
Frankfurter śledzi dzienne kursy wymiany z 98 banków centralnych i oficjalnych instytucji dla 206 walut. Dane sięgają roku 1948.
Publiczne API jest dostępne pod adresem api.frankfurter.dev i nie wymaga żadnego klucza API. Projekt jest otwartoźródłowy. Aby zachować pełną kontrolę, możesz go także wdrożyć samodzielnie.
Pracujesz z agentem AI? Przekaż mu plik llms.txt lub skonfiguruj serwer MCP.
Kursy
Pobierz najnowsze kursy wymiany.
curl https://api.frankfurter.dev/v2/ratesZmień walutę bazową za pomocą base.
curl https://api.frankfurter.dev/v2/rates?base=usdFiltruj waluty docelowe za pomocą quotes.
curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbpKursy historyczne
Sprawdź kursy dla wybranego dnia.
curl https://api.frankfurter.dev/v2/rates?date=1999-01-04Szeregi czasowe
Pobierz kursy w przedziale czasowym za pomocą from i to.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01"es=usdWskazówka: Odpytuj tylko o potrzebne waluty. W przypadku długich okresów format NDJSON pozwala na strumieniowanie wyników wiersz po wierszu.
Grupowanie
Agreguj szeregi czasowe za pomocą group. Dostępne wartości: week i month.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=monthFiltrowanie według źródła
Ogranicz dane do konkretnych instytucji za pomocą parametru providers.
curl https://api.frankfurter.dev/v2/rates?providers=ecb Domyślnie API łączy kursy ze wszystkich źródeł. Aby sprawdzić dane jednej instytucji, użyj providers lub odpytaj jej własne endpointy.
Atrybucja źródeł
Parametr expand=providers wskazuje instytucje, które wpłynęły na każdy kurs rynkowy.
curl https://api.frankfurter.dev/v2/rates?expand=providers Każdy wpis zawiera tablicę providers z kluczami źródeł. Pole to jest pomijane przy walutach powiązanych na stałe (pegged).
Format CSV
Kursy są dostępne w formacie CSV. Dodaj .csv do ścieżki lub ustaw nagłówek Accept na text/csv.
curl https://api.frankfurter.dev/v2/rates.csvFormat NDJSON
Dla dużych zbiorów użyj formatu NDJSON (Newline-Delimited JSON), ustawiając nagłówek Accept na application/x-ndjson. Każdy wiersz to osobny obiekt JSON.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01Pojedynczy kurs
Pobierz kurs dla wybranej pary walutowej.
curl https://api.frankfurter.dev/v2/rate/eur/usdWaluty
Lista dostępnych walut i ich źródeł.
curl https://api.frankfurter.dev/v2/currenciesUwzględnij waluty historyczne za pomocą parametru scope.
curl https://api.frankfurter.dev/v2/currencies?scope=allPojedyncza waluta
Szczegóły i źródła dotyczące konkretnej waluty.
curl https://api.frankfurter.dev/v2/currency/eurŹródła
Lista instytucji dostarczających dane do API.
curl https://api.frankfurter.dev/v2/providersSzczegółowe informacje o wybranej instytucji.
curl https://api.frankfurter.dev/v2/providers/ecbKursy według źródła
Pobieraj kursy bezpośrednio od wybranej instytucji. Obowiązują te same parametry co w /v2/rates.
curl https://api.frankfurter.dev/v2/providers/ecb/ratesPojedyncza para walutowa z tego źródła:
curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd Kursy wybranej pary w czasie. Działa z parametrem date, zakresami (from i to) oraz formatami .csv i ndjson.
curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15Przeliczanie walut
Nie ma osobnego endpointu do przeliczania. Pobierz kurs i wykonaj mnożenie w kodzie.
function convert(base, quote, amount) {
const api = "https://api.frankfurter.dev";
return fetch(`${api}/v2/rate/${base}/${quote}`)
.then((r) => r.json())
.then((d) => (amount * d.rate).toFixed(2));
}
convert("eur", "usd", 10).then((result) =>
alert(`10 EUR = ${result} USD`)
);Błędy
API zwraca standardowe kody błędów HTTP wraz z obiektem JSON.
{
"message": "Could not find currency ABC"
}400- Nieprawidłowy parametr lub błędne zapytanie.
404- Nie znaleziono waluty, kursu ani zasobu.
422- Zapytanie zrozumiałe, ale nie może zostać przetworzone.
Własny hosting
Możesz samodzielnie hostować Frankfurter za pomocą Dockera. Przewodnik wdrażania opisuje konfigurację produkcyjną oraz klucze API.
FAQ
- Do czego nadaje się Frankfurter (a do czego nie)?
- API sprawdza się w rozliczeniach SaaS, e-commerce, raportach podatkowych, systemach ERP i księgowych oraz badaniach na danych od 1948 roku. Nie jest przeznaczone do handlu w czasie rzeczywistym ani transakcji intraday.
- Czy mogę używać Frankfurter komercyjnie?
- Tak. Do danych źródłowych mają zastosowanie warunki poszczególnych instytucji.
- Czy obowiązują limity zapytań?
- Nie ma limitów kwotowych. Działa zabezpieczenie przed przeciążeniem, ale brak dziennych i miesięcznych limitów. Przy dużym wolumenie zalecamy buforowanie, własny hosting lub bezpośrednie pobieranie zbiorów danych.
- Czy API obsługuje GraphQL?
- Nie. REST API jest na tyle proste, że GraphQL wprowadziłby tylko zbędną złożoność i uniemożliwił buforowanie brzegowe. Parametry
base,quotesorazfrom/tozapewniają dokładny wybór danych. - Czy wersja v1 API zostanie wyłączona?
- Nie. API v1 jest oznaczone jako deprecated na rzecz v2, ale pozostaje stale dostępne. Zobacz dokumentację v1. Dane EBC znajdziesz w /v2/providers/ecb/rates.
- Jak chroniona jest prywatność?
- Frankfurter nie przechowuje danych osobowych, adresów IP ani odpytywanych URL-i. Gromadzimy wyłącznie anonimowe statystyki zbiorcze na własnej instancji Plausible Analytics.
- Czy muszę deklarować to API w informacjach o prywatności w App Store lub Google Play?
- Nie. Zapytania są anonimowe i nie są rejestrowane. Zgodnie z wytycznymi Apple i Google stanowią dane niepodlegające zbieraniu.
- Gdzie zgłaszać błędy lub zadawać pytania?
- Otwórz zgłoszenie (issue), aby zgłosić błąd lub zaproponować nowe źródło. Pytania i projekty społeczności należy kierować do dyskusji (discussions).
- Jak dokładne są prezentowane kursy?
- Do celów sprawozdawczości filtruj według konkretnej instytucji, aby otrzymać jej oficjalne kursy referencyjne. W innych zastosowaniach sprawdza się domyślny kurs rynkowy.
- Czy są to kursy średnie, kupna czy sprzedaży?
- API zwraca kursy średnie (mid-market). Jeśli dane źródło publikuje kursy kupna i sprzedaży zamiast referencyjnego, Frankfurter zapisuje oba i oblicza średnią.
- Czy wszystkie kursy są publikowane codziennie?
- Prawie wszystkie. Jedynie 2 źródła publikują rzadziej: brytyjski urząd skarbowy HMRC (miesięcznie) oraz Departament Skarbu USA UST (kwartalnie). Ich kursy nie wchodzą do feedu łączonego i są dostępne przy bezpośrednim odpytaniu źródła.
- Dlaczego okresy niektórych starych i nowych walut się pokrywają?
- Część instytucji datuje nowe waluty wstecznie w okres obowiązywania poprzedniej waluty (np.
TRLkończy się w 2010 roku, aTRYzaczyna już w 1996). Przejmujemy dane źródłowe bez zmian i filtrujemy nakładanie dopiero przy łączeniu. - Dlaczego Frankfurter?
- Ponieważ Europejski Bank Centralny, od którego danych wszystko się zaczęło, ma swoją siedzibę we Frankfurcie.