Frankfurter
Frankfurter는 104개 중앙은행과 공식 기관에서 208개 통화의 일별 환율을 수집합니다. 데이터는 1948년까지 거슬러 올라갑니다.
공개 API는 api.frankfurter.dev에서 이용할 수 있으며, API 키가 필요하지 않습니다. 오픈소스이므로 완전한 제어가 필요하면 셀프 호스팅할 수도 있습니다.
AI 에이전트를 사용한다면 llms.txt를 참조시키거나 MCP 서버를 추가하세요.
환율
최신 환율을 조회합니다.
curl https://api.frankfurter.dev/v2/ratesbase로 기준 통화를 변경합니다.
curl https://api.frankfurter.dev/v2/rates?base=usdquotes로 대상 통화를 필터링합니다.
curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbp과거 환율
특정 날짜의 환율을 조회합니다.
curl https://api.frankfurter.dev/v2/rates?date=1999-01-04시계열
from과 to로 기간을 지정해 환율을 조회합니다.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01"es=usd팁: 필요한 통화만 지정하면 응답이 작아집니다. 긴 기간에는 NDJSON을 요청해 결과를 한 줄씩 스트리밍하세요.
그룹화
group으로 시계열을 다운샘플링합니다. week과 month를 지원합니다.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=month제공 기관별 필터링
providers로 특정 제공 기관만 지정합니다.
curl https://api.frankfurter.dev/v2/rates?providers=ecb 기본적으로 모든 제공 기관의 환율을 종합한 값을 반환합니다. 특정 기관의 환율만 필요하면 providers를 사용하거나, 제공 기관 엔드포인트를 직접 호출하세요.
제공 기관 표시
expand=providers를 추가하면 각 종합 환율에 기여한 제공 기관을 확인할 수 있습니다.
curl https://api.frankfurter.dev/v2/rates?expand=providers 각 행에 기여한 제공 기관 키가 담긴 providers 배열이 추가됩니다. 고정 환율(페그) 통화의 행에는 이 필드가 없습니다. 해당 환율은 제공 기관 데이터가 아니라 페그 관계에서 계산되기 때문입니다.
CSV 출력
환율은 CSV 형식으로도 제공됩니다. 경로 끝에 .csv를 붙이거나 Accept 헤더를 text/csv로 설정하세요.
curl https://api.frankfurter.dev/v2/rates.csvNDJSON 출력
대용량 응답에는 Accept 헤더를 application/x-ndjson으로 설정해 NDJSON(줄바꿈으로 구분된 JSON)을 요청하세요. 각 줄이 독립된 JSON 객체이므로, 전체 응답을 버퍼링하지 않고 긴 시계열을 스트리밍할 수 있습니다.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01단일 환율
통화 쌍 하나의 환율을 조회합니다. 필요하면 date나 providers를 추가하세요.
curl https://api.frankfurter.dev/v2/rate/eur/usd통화
이용 가능한 통화와 제공 기관 범위를 조회합니다.
curl https://api.frankfurter.dev/v2/currenciesscope로 과거 통화까지 포함합니다.
curl https://api.frankfurter.dev/v2/currencies?scope=all단일 통화
특정 통화의 상세 정보와 제공 기관 범위를 조회합니다.
curl https://api.frankfurter.dev/v2/currency/eur제공 기관
API의 데이터 제공 기관을 조회합니다.
curl https://api.frankfurter.dev/v2/providers특정 제공 기관의 상세 정보를 조회합니다.
curl https://api.frankfurter.dev/v2/providers/ecb제공 기관별 환율
특정 제공 기관에서 직접 환율을 조회합니다. /v2/rates 및 /v2/rate와 같은 파라미터를 지원합니다.
curl https://api.frankfurter.dev/v2/providers/ecb/rates해당 제공 기관의 통화 쌍 하나를 조회합니다.
curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd date, 기간(from과 to), 그룹화와 함께 사용할 수 있습니다. .csv와 ndjson 같은 형식도 지원합니다.
curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15환전 계산
별도의 환전 엔드포인트는 없습니다. 환율을 조회한 뒤 몇 줄의 코드로 계산하세요.
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`)
);오류
API는 표준 HTTP 상태 코드와 JSON 본문을 반환합니다.
{
"status": 422,
"message": "invalid currency: ABC"
}400- 잘못된 파라미터 또는 형식이 올바르지 않은 요청.
404- 통화, 환율 또는 리소스를 찾을 수 없음.
422- 요청은 이해했지만 처리할 수 없음.
셀프 호스팅
Docker로 셀프 호스팅할 수 있습니다. 프로덕션 설정과 API 키 구성은 Deploy 가이드를 참고하세요.
자주 묻는 질문
- Frankfurter는 어떤 용도에 적합하고, 어떤 용도에는 맞지 않나요?
- SaaS 과금, 이커머스, 세무 신고, ERP와 회계 시스템, 1948년까지 이어지는 과거 시계열을 다루는 학술 연구에 적합합니다. 실시간 트레이딩이나 장중 변동이 극심한 특수 통화에는 맞지 않습니다.
- 상업적으로 무료로 사용할 수 있나요?
- 네. 환율 자체에는 각 제공 기관의 이용약관이 적용됩니다.
- 호출 제한이 있나요?
- 할당량은 없습니다. 남용을 막기 위한 속도 제한은 있지만, 월간이나 일간 상한은 없습니다. 대량으로 사용한다면 응답 캐싱, 셀프 호스팅, 데이터셋 직접 조회를 고려하세요.
- GraphQL을 지원하나요?
- 아니요. REST API가 충분히 단순해서 GraphQL은 별다른 이점 없이 복잡성만 더합니다. API를 빠르게 유지하는 엣지 캐싱도 깨뜨립니다.
base,quotes,from/to같은 쿼리 파라미터로 필요한 데이터만 정확히 가져오세요. - v1 API는 종료되나요?
- 아니요. v1 API는 v2로 대체되어 deprecated 상태이지만, 계속 제공됩니다. v1 문서를 참고하세요. 유럽중앙은행 데이터는 /v2/providers/ecb/rates를 사용하세요.
- API의 개인정보 처리 방침은 무엇인가요?
- API는 개인 정보, IP 주소, 요청 URL을 수집하거나 기록하지 않습니다. 공개 인스턴스는 캐싱과 DDoS 방어를 위해 Cloudflare 뒤에서 운영되며, Cloudflare는 집계된 트래픽 통계만 제공합니다.
- App Store나 Google Play의 개인정보 라벨에 API를 명시해야 하나요?
- 아니요. 요청은 익명이고 요청 로그를 보관하지 않으므로, Apple과 Google Play 가이드라인에서 "수집하지 않는 데이터"에 해당합니다.
- 버그 신고나 질문은 어디에서 하나요?
- 버그 신고, 기능 요청, 새 제공 기관 제안은 이슈를 열어 주세요. 질문이나 Frankfurter로 만든 라이브러리, 도구 공유는 Discussions를 이용하세요.
- 환율은 얼마나 정확한가요?
- 규제 준수 목적이라면 특정 제공 기관으로 필터링해 공식 기준 환율을 받으세요. 일반 용도에는 기본 종합 환율로 충분하지만, 새 데이터가 들어오면 마지막 소수 자리가 바뀔 수 있습니다.
- 환율은 중간값, 매수가, 매도가 중 무엇인가요?
- API는 중간 시장 환율을 반환합니다. 제공 기관이 기준 환율 대신 매수·매도 호가를 공표하는 경우, Frankfurter는 둘을 모두 저장하고 중간값을 계산합니다.
- 모든 환율이 일별인가요?
- 거의 모두 그렇습니다. 일부 출처는 주별, 월별, 분기별 데이터를 제공합니다. 이런 출처는 종합 피드에서 제외됩니다.
providers필터로 직접 조회하세요. - 일부 옛 통화와 새 통화의 기간이 겹치는 이유는 무엇인가요?
- 일부 제공 기관이 새 통화 데이터를 옛 통화 기간까지 거슬러 소급하기 때문입니다 (예:
TRL은 2010년에 끝나지만TRY는 1996년부터 시작). 제공 기관 데이터는 그대로 기록하고, 종합할 때만 중복을 걸러냅니다. - 왜 Frankfurter인가요?
- 최초의 데이터 출처였던 유럽중앙은행이 프랑크푸르트에 있기 때문입니다.