Frankfurter는 104개 중앙은행과 공식 기관에서 208개 통화의 일별 환율을 수집합니다. 데이터는 1948년까지 거슬러 올라갑니다.

공개 API는 api.frankfurter.dev에서 이용할 수 있으며, API 키가 필요하지 않습니다. 오픈소스이므로 완전한 제어가 필요하면 셀프 호스팅할 수도 있습니다.

AI 에이전트를 사용한다면 llms.txt를 참조시키거나 MCP 서버를 추가하세요.

환율

최신 환율을 조회합니다.

curl https://api.frankfurter.dev/v2/rates

base로 기준 통화를 변경합니다.

curl https://api.frankfurter.dev/v2/rates?base=usd

quotes로 대상 통화를 필터링합니다.

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&quotes=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.csv

NDJSON 출력

대용량 응답에는 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/currencies

scope로 과거 통화까지 포함합니다.

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인가요?
최초의 데이터 출처였던 유럽중앙은행이 프랑크푸르트에 있기 때문입니다.
European Central Bank and Main riverfront, Frankfurt