Live

API i kursit të këmbimit në lekë

Kurset e blerjes dhe të shitjes kundrejt lekut (ALL) nga Banka e Shqipërisë, bankat tregtare dhe këmbimoret — një dokument JSON, i rifreskuar çdo 15 minuta. Kurset aktuale nuk kërkojnë çelës dhe as regjistrim.

Nisja e shpejtë

Një kërkesë kthen të gjitha valutat, me kuotimin e secilit institucion pranë mesatares.

cURL
curl https://api.kursi.al/api/rates
JavaScript
const { timestamp, rates } = await fetch('https://api.kursi.al/api/rates').then(r => r.json());

console.log(`1 EUR = ${rates.EUR.buy} / ${rates.EUR.sell} ALL (${timestamp})`);

// Një institucion i vetëm në vend të mesatares — undefined nëse nuk e kuotoi EUR-on këtë cikël:
const bkt = rates.EUR.sources.BKT;
Python
import requests

data = requests.get("https://api.kursi.al/api/rates", timeout=10).json()
eur = data["rates"]["EUR"]
print(eur["buy"], eur["sell"], data["timestamp"])

Aksesi

Të hapura

Falas · pa çelës
  • GET /api/rates
  • GET /api/rate/{code}
  • GET /health

Pa regjistrim. CORS është i hapur, prandaj këto mund të thirren edhe nga shfletuesi në çdo faqe, jo vetëm nga serveri.

Me çelës

Me pagesë
  • GET /api/history/{code}
  • GET /api/graph/{code}

Çelësin dërgojeni në header-in X-API-Key. Për çelësin dhe çmimet, na shkruani në info@oda.al.

curl "https://api.kursi.al/api/history/EUR?from_date=2026-09-01&to_date=2026-09-07&source=BKT" \
  -H "X-API-Key: celesi-juaj"

Pa një çelës të vlefshëm, këto endpoint-e përgjigjen:

HTTP/1.1 403 Forbidden

{ "detail": "This endpoint requires an API key. Contact info@oda.al for access and pricing." }
Mbajeni çelësin në server. Një çelës i vendosur në JavaScript-in e faqes lexohet nga kushdo që e hap atë faqe. Thirrini endpoint-et me çelës nga backend-i juaj dhe përcillini rezultatin te shfletuesi.

Endpoint-et

URL-ja bazë: https://api.kursi.al. Çdo endpoint është një GET që kthen JSON; {code} është kodi ISO 4217 i valutës, me shkronja të mëdha ose të vogla.

Kurset aktuale

Falas · pa çelës
GET /api/rates

Të gjitha valutat në një dokument — i njëjti nga i cili vizatohet tabela e kurseve në këtë faqe.

{
  "timestamp": "2026-09-21T14:30:00+02:00",
  "rates": {
    "EUR": {
      "buy": 91.25,
      "sell": 91.71,
      "change": "-0.11%",
      "trend": "down",
      "sources": {
        "BOA":      { "buy": 91.49, "sell": 91.49 },
        "BKT":      { "buy": 91.15, "sell": 91.85 },
        "Iliria98": { "buy": 91.10, "sell": 91.80 }
      }
    },
    "NOK": {
      "buy": 7.74,
      "sell": 8.19,
      "change": "+0.13%",
      "trend": "up",
      "sources": {
        "BOA":        { "buy": 8.48, "sell": 8.48 },
        "Iliria98":   { "buy": 7.00, "sell": 7.90 },
        "Raiffeisen": { "buy": 1.45, "sell": 15.45, "in_avg": false }
      }
    }
  }
}
timestamp
Kur u mblodhën këto kurse — ISO 8601 me diferencën orare të Shqipërisë.
buy, sell
Mesatarja e burimeve që e kuotuan valutën në atë cikël, në lekë për një njësi.
change, trend
Lëvizja e kursit të mesëm kundrejt rreth 24 orëve më parë, si tekst ("+0.12%"), dhe drejtimi i saj: up, down ose neutral.
sources
Kuotimi i secilit institucion. Një burim që nuk e kuotoi valutën mungon. "in_avg": false shënon një kuotim që u la jashtë mesatares — shihni Konventat.

Një valutë e vetme

Falas · pa çelës
GET /api/rate/{code}

Kursi i fundit i një valute të vetme. rate është mesi mes blerjes dhe shitjes mesatare.

{
  "currency": "EUR",
  "timestamp": "2026-09-21T14:30:00+02:00",
  "sources": {
    "BOA":      { "buy": 91.49, "sell": 91.49 },
    "BKT":      { "buy": 91.15, "sell": 91.85 },
    "Iliria98": { "buy": 91.10, "sell": 91.80 }
  },
  "rate": 91.48,
  "buy": 91.25,
  "sell": 91.71,
  "type": "avg"
}

Me ?type=buy ose ?type=sell përgjigjja ngushtohet në atë anë: rate është mesatarja për të, dhe sources jep një numër të vetëm për çdo institucion.

{
  "currency": "EUR",
  "timestamp": "2026-09-21T14:30:00+02:00",
  "sources": { "BOA": 91.49, "BKT": 91.15, "Iliria98": 91.1 },
  "rate": 91.25,
  "type": "buy"
}

Historiku

Kërkon çelës
GET /api/history/{code}

Çdo kurs i regjistruar në një interval datash — një rresht për çdo cikël përditësimi — për mesataren ose për një burim të vetëm. I bërë për rakordim, kërkime tregu dhe eksporte.

from_date
Fillimi i intervalit: 2026-09-01 ose 2026-09-01 08:00:00, në orën e Shqipërisë. Jepeni gjithmonë — pa të, përgjigjja nis nga rreshti i parë që kemi.
to_date
Fundi i intervalit. Një datë pa orë e përfshin të gjithë atë ditë.
source
AVG (parazgjedhja), ose një nga BOA, ADON, BKT, Raiffeisen, Iliria98, AlbKredit.
[
  { "timestamp": "2026-09-01 09:00:00", "buy": 91.15, "sell": 91.85, "source": "BKT" },
  { "timestamp": "2026-09-01 09:15:00", "buy": 91.15, "sell": 91.85, "source": "BKT" },
  { "timestamp": "2026-09-01 09:30:00", "buy": null,  "sell": null,  "source": "BKT" }
]

Datat këtu janë në orën e Shqipërisë, pa diferencë orare. buy dhe sell janë null në ciklet ku burimi i zgjedhur nuk pati kuotim.

Seritë e grafikut

Kërkon çelës
GET /api/graph/{code}

Seritë pas grafikëve të kësaj faqeje, të grupuara sipas periudhës dhe gati për t’u vizatuar.

timeframe
1D, 1W, 1M (parazgjedhja), 3M, 6M, 1Y ose YTD.
source
Një burim i vetëm (AVG si parazgjedhje). Kthen { labels, buy_data, sell_data }; pikat ku burimi nuk pati kuotim hiqen.
sources
Disa njëherësh, të ndarë me presje: sources=BOA,BKT,Iliria98. Kthen çdo seri mbi një bosht të përbashkët kohe, me null aty ku një burim nuk pati kuotim — një kërkesë e vetme për një grafik të tërë krahasimi.
{
  "labels": ["22 Aug", "23 Aug", "24 Aug"],
  "series": {
    "BOA": { "buy": [91.60, 91.58, 91.54], "sell": [91.60, 91.58, 91.54] },
    "BKT": { "buy": [91.20, null,  91.15], "sell": [91.90, null,  91.85] }
  }
}

labels janë tekste për shfaqje, në orën e Shqipërisë: 14:30 për 1D, Mon 21 për 1W, 21 Sep deri në gjashtë muaj, 21 Sep 26 për një vit. Shkurtimet e ditëve dhe të muajve vijnë në anglisht, në të dyja gjuhët — po ju duhen në shqip, ndërtojini vetë nga data juaj.

Gjendja e shërbimit

Falas · pa çelës
GET /health

A po mblidhen ende kurset, burim pas burimi. status është ok, degraded (një burim po dështon, të tjerët janë të freskët) ose down — dhe down vjen me HTTP 503, që një monitorues uptime-i ta ndjekë. Ia vlen ta kontrolloni para se të alarmoheni për një kurs që nuk ka lëvizur.

{
  "status": "ok",
  "last_run": "2026-09-21T14:30:04+02:00",
  "database": "ok",
  "failing_sources": [],
  "sources": {
    "BKT": {
      "status": "ok",
      "last_success": "2026-09-21T14:30:02+02:00",
      "last_attempt": "2026-09-21T14:30:02+02:00",
      "consecutive_failures": 0,
      "currencies": 7
    }
  }
}

Konventat

Valutat

Kundrejt lekut shqiptar (ALL):

EUR Euro USD Dollar Amerikan GBP Paund Britanik CHF Franga Zvicerane CAD Dollar Kanadez AUD Dollar Australian SEK Korona Suedeze NOK Korona Norvegjeze TRY Lira Turke SAR Rial Saudit AED Dirham i EAB JPY Jen Japonez RUB Rubla Ruse MKD Denar Maqedonas DKK Korona Daneze RSD Dinar Serb CZK Korona Çeke RON Leu Rumun PLN Zloti Polak BAM Marka Bosanjake

Burimet

IdInstitucioniLloji
BOABanka e ShqipërisëKurs zyrtar referues
ADONADONKurs tregu — vend ku mund të këmbeni
BKTBKTKurs tregu — vend ku mund të këmbeni
RaiffeisenRaiffeisenKurs tregu — vend ku mund të këmbeni
Iliria98Iliria98Kurs tregu — vend ku mund të këmbeni
AlbKreditAlbKreditKurs tregu — vend ku mund të këmbeni

AVG pranohet kudo ku pranohet një burim, dhe do të thotë mesatarja. Më shumë për secilin institucion te faqja e burimeve.

Gabimet

StatusiPërgjigjjaKur
400{ "detail": "Unknown source 'XYZ'. Valid: AVG, BOA, …" }Një source i panjohur, ose një datë që nuk është YYYY-MM-DD / YYYY-MM-DD HH:MM:SS.
403{ "detail": "This endpoint requires an API key. …" }Një endpoint me çelës u thirr pa një X-API-Key të vlefshëm.
404{ "error": "Currency not found" }/api/rate/{code} për një valutë që nuk e mbledhim.
429—Shumë kërkesa nga IP-ja juaj. Prisni pak dhe riprovoni; po t’i ruani përgjigjet për një minutë, nuk e shihni fare.
503{ "error": "Database unavailable" }Problem i përkohshëm i backend-it. Edhe /health përgjigjet me 503 kur kurset kanë pushuar së përditësuari.

Gabimet e validimit përdorin detail, të tjerët error. Në një dështim të rrallë të backend-it, një përgjigje 200 mund të mbajë { "error": … } në vend të të dhënave, prandaj trajtojeni mungesën e çelësit rates si dështim, në vend që të lexoni përtej tij.

Widgeti

Pa shkruar kod: një iframe që tregon kurset e ditës në faqen tuaj, me burimet dhe valutat që zgjidhni. Ngarkon një stil dhe një skript të vogël, dhe rifreskohet vetë.

Konfiguro Widget-in

Valutat (zgjidhni ato që dëshironi)
Kodi Embed

Preview

Pyetje të shpeshta

A është vërtet falas API-ja e kurseve aktuale?

Po. /api/rates dhe /api/rate/{code} nuk kërkojnë çelës dhe as regjistrim, dhe mund të thirren nga serveri juaj ose drejtpërdrejt nga shfletuesi, në çdo faqe. Kërkesat kanë një kufi për çdo IP, që shërbimi të qëndrojë i qëndrueshëm për të gjithë; të dhënat ndryshojnë çdo 15 minuta, prandaj ruajtja e tyre për një minutë nuk ju kushton asgjë.

Si mund të marr një çelës API?

Çelësat jepen me dorë. Na shkruani në info@oda.al me dy rreshta se çfarë po ndërtoni dhe cilat endpoint-e ju duhen; ju kthejmë përgjigje me çmimet dhe me një çelës.

Përse historiku dhe grafikët janë me pagesë?

Kurset aktuale janë një dokument i vogël. Vitet me histori për çdo burim, të regjistruara në çdo përditësim, janë ajo që kushton për t’u ruajtur dhe për t’u shërbyer — prandaj ajo pjesë është shërbim me pagesë dhe kurset aktuale mbeten falas.

Nga vijnë kurset?

Nga ajo që publikon vetë secili institucion: kursi zyrtar i Bankës së Shqipërisë, dy banka tregtare dhe tri këmbimore. Faqja e burimeve i rendit të gjitha dhe shpjegon si llogaritet mesatarja dhe cilat kuotime lihen jashtë saj.

A mund të marr kursin e një banke të vetme në vend të mesatares?

Po. Çdo valutë mban një objekt sources me blerjen dhe shitjen e secilit institucion, dhe /api/history e /api/graph pranojnë parametrin source. Një burim që nuk e kuotoi valutën thjesht mungon.

Ju duhet historiku ose të dhënat e grafikëve?

Na tregoni çfarë po ndërtoni dhe cilat endpoint-e ju duhen; ju kthejmë përgjigje me çmimet dhe me një çelës.

Na shkruani në info@oda.al