exrate API — უფასო JSON ეროვნული ბანკების კურსებისთვის

საჯარო REST API მისამართზე api.banks-rates.com. JSON პასუხები, ავტორიზაციის გარეშე, ლოიალური IP-ლიმიტები, ღია CORS. იგივე მონაცემები, რომელსაც ინტერფეისი იყენებს და MCP სერვერი AI-აგენტებს უბრუნებს.

ენდპოინტები

MethodPathDescription
GET /v1/banks List all supported banks with metadata.
GET /v1/banks/{id} Per-bank detail (currencies, schedule, history range).
GET /v1/rate Convert amount at a bank's rate. Params: bank, date, from, to, amount.
GET /v1/cross Cross-rate via a bank's national currency. Params: bank, date, from, to, amount.
GET /v1/rates/series Historical series. Params: bank, currency, from, to (dates).
GET /v1/status Per-bank freshness: latest rate date, currency count, updated-at timestamp.
GET /v1/openapi.json Full OpenAPI 3.1 spec.
GET /v1/reference Interactive API reference (Scalar) with per-language code samples.

Examples

curl

curl -s "https://api.banks-rates.com/v1/rate?bank=NBP&date=2026-04-20&from=USD&to=PLN&amount=100"

Python

import requests
r = requests.get("https://api.banks-rates.com/v1/rate", params={
    "bank": "NBP", "date": "2026-04-20",
    "from": "USD", "to": "PLN", "amount": 100,
})
r.raise_for_status()
print(r.json())

JavaScript / TypeScript

const url = new URL("https://api.banks-rates.com/v1/rate");
url.searchParams.set("bank", "NBP");
url.searchParams.set("date", "2026-04-20");
url.searchParams.set("from", "USD");
url.searchParams.set("to", "PLN");
url.searchParams.set("amount", "100");
const res = await fetch(url);
const data = await res.json();

Go

req, _ := http.NewRequest("GET", "https://api.banks-rates.com/v1/rate", nil)
q := req.URL.Query()
q.Set("bank", "NBP"); q.Set("date", "2026-04-20")
q.Set("from", "USD"); q.Set("to", "PLN"); q.Set("amount", "100")
req.URL.RawQuery = q.Encode()
res, _ := http.DefaultClient.Do(req)

Authentication & rate limits

The API works without authentication at the free per-IP limits (12 requests/hour, 256/day). For higher limits (16/min, 800/hour, 16,000/day), issue an API key in the console and send it as a bearer token:

curl -s "https://api.banks-rates.com/v1/rate?bank=NBP&date=2026-04-20&from=USD&to=PLN&amount=100" \
  -H "Authorization: Bearer brk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Exceeding a limit returns 429 with a Retry-After header and a JSON body { "error": "rate_limited", "scope": "hour", "limit": 12 }. Schema and docs endpoints (e.g. /v1/openapi.json) have a separate flat 5 req/sec per-IP limit.

რატომ exrate API და არა თითოეული ბანკის ფიდი პირდაპირ?

  • One unified JSON shape across every supported central bank — no per-bank parser needed.
  • Built-in previous-business-day fallback for invoicing and tax filings.
  • Hosted on Cloudflare's edge — sub-100ms response globally.
  • No XML parsing, no CSV mangling, no scraping. JSON, every endpoint.
  • Free for commercial use — no key required; add one only to raise rate limits.

ხშირად დასმული კითხვები

API უფასოა კომერციული გამოყენებისთვის?

დიახ. მონაცემები საჯაროა (ცენტრალური ბანკები), ჩვენი ჰოსტინგი და API კი — უფასო. ატრიბუცია მისასალმებელია.

exrate ოფიციალური წყაროა?

არა — ჩვენ ცენტრალური ბანკების ოფიციალურ კურსებს ვაქვეყნებთ ხელახლა. სამართლებრივი წყარო თავად ბანკი რჩება. ჩვენ ვართ ერთიანი, ადვილად დასამუშავებელი, ჰოსტირებული ენდპოინტი.

რა SLA აქვს აპტაიმს?

Best-effort, Cloudflare Workers-ზე. ბოლო თვეებში >99.9%-ს ვინარჩუნებთ, მაგრამ უფასო ტარიფზე საკონტრაქტო SLA არ არის.

რა ლიმიტები მოქმედებს?

IP-ლიმიტები edge-დონეზე. ტიპური აპლიკაცია მათ ვერ მიაღწევს. მძიმე პაკეტურმა მომხმარებლებმა მოთხოვნები გადაანაწილონ და აგრესიულად დააქეშონ.

როგორ მოვახდინო ინტეგრაცია NBG/NBP ნაკადებთან?

გამოიძახეთ /v1/rate პარამეტრებით bank=NBG|NBP და სასურველი თარიღით/ვალუტით. პასუხის სტრუქტურა ყველა ბანკისთვის იდენტურია — პირდაპირი ჩანაცვლება თითოეული ბანკის ფიდთან ცალკეული ინტეგრაციისა.