Python
SDK는 필요하지 않습니다. Frankfurter는 평면 JSON을 반환하는 일반 HTTPS이므로, 이미 쓰는 HTTP 라이브러리로 충분합니다. API 키도 계정도 필요 없습니다.
빠른 시작
환율을 조회하고 환전합니다:
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()
total = 100 * data["rate"] 응답은 평면 객체 하나입니다: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. 잘못된 통화 코드는 JSON 메시지와 함께 422를 반환합니다.
금융 계산에 안전한 연산
부동소수점은 표시에는 괜찮지만 회계에는 맞지 않습니다. parse_float를 json.loads에 전달해 환율을 Decimal로 파싱하세요:
from decimal import Decimal
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json(parse_float=Decimal)
total = Decimal("100") * data["rate"]여러 환율 한 번에 조회
/v2/rates는 대상 통화별로 한 행씩 담긴 평면 배열을 반환합니다. 컴프리헨션으로 조회용 딕셔너리로 바꾸세요. quotes를 생략하면 모든 통화를 반환합니다.
res = requests.get(
"https://api.frankfurter.dev/v2/rates",
params={"base": "usd", "quotes": "eur,gbp,jpy"},
)
rates = {row["quote"]: row["rate"] for row in res.json()}변하지 않는 데이터 캐싱
고정한 제공 기관의 과거 환율은 변하지 않으므로 원하는 만큼 오래 캐시하세요. 종합 환율은 새 데이터가 들어오면 바뀔 수 있고, 최신 환율은 제공 기관이 공표할 때마다 영업일 기준 하루 몇 번 정도 바뀌므로 짧은 TTL을 주세요. requests-cache를 쓰면 캐싱은 한 줄입니다:
import requests_cache
session = requests_cache.CachedSession("frankfurter", expire_after=3600)
res = session.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()비동기
비동기 웹 앱에서는 httpx를 사용하세요:
import httpx
API = "https://api.frankfurter.dev"
async def rate(base, quote):
async with httpx.AsyncClient(base_url=API) as client:
res = await client.get(f"/v2/rate/{base}/{quote}")
res.raise_for_status()
return res.json()["rate"]공식 제공 기관 고정
기본적으로 모든 제공 기관을 종합한 환율을 받습니다. providers를 추가해 특정 기관 하나를 고정하세요. EU 부가가치세용 ECB 기준 환율처럼 관할 지역이 자국 중앙은행의 공표 환율을 요구할 때 중요합니다.
res = requests.get(
"https://api.frankfurter.dev/v2/rate/usd/eur",
params={"providers": "ecb"},
)
data = res.json()모든 제공 기관을 살펴보세요. 고정한 제공 기관은 자체 공표 일정을 따르므로, 최신 환율이 종합 환율보다 하루 늦을 수 있습니다.
시계열을 분석하나요?
기간 지정, 월별 그룹화, 차트에는 CSV 엔드포인트를 DataFrame에 바로 로드하세요. pandas를 참고하세요.