AI & Dashboard Rehberi
apibir'i Claude ve diğer yapay zeka asistanlarıyla kullanarak dakikalar içinde pano, bot ve rapor üretin.
Neden apibir yapay zeka ile mükemmel çalışır?
Yanıtlar sığ ve öngörülebilir bir zarf kullanır (success / data / meta), alan adları tutarlıdır ve /v1/openapi.json adresinde makine tarafından okunabilir şema yayınlanır. Bir AI asistanı bu özellikleri gördüğünde doğru istekleri ilk denemede kurar; halüsinasyon riski sıfırlanır.
Hangi yolu izlemelisiniz?
İhtiyacınıza göre üç farklı entegrasyon biçimi var.
1. Sohbette kod ürettir
Asistana API dokümanını ve prompt şablonunu verin; tek dosyalık pano, betik veya rapor üretsin. Kurulum gerektirmez, en hızlı yol.
Kurulum: yok Süre: 2 dk
2. Araç (tool) tanımı ver
Kendi uygulamanızda modele apibir_sorgula aracını tanıtın; model gerektiğinde
canlı veri çeksin. Sohbet botları ve asistanlar için uygundur.
Kurulum: 30 dk Canlı veri
3. MCP sunucusu bağla
apibir MCP sunucusunu masaüstü asistanınıza ekleyin; tüm uçlar araç olarak görünsün. Tekrarlayan analiz ve rapor işleri için en güçlü seçenek.
Kurulum: 5 dk Tüm uçlar
Hazır prompt şablonları
Kopyalayın, köşeli parantezleri kendi bilgilerinizle değiştirin, asistana yapıştırın. Şablonlar bilerek ayrıntılı: model ne kadar az tahmin ederse çıktı o kadar doğru olur.
1. Tek dosyalık piyasa panosu
En sık istenen çıktı. Chart.js ile grafik, otomatik yenileme ve karanlık tema desteği içeren tam bir HTML dosyası verir.
apibir REST API'sini kullanarak tek dosyalık bir HTML dashboard yaz.
Temel adres: https://api.apibir.com/v1
Kimlik doğrulama: Authorization: apikey <ANAHTAR> (istekler backend proxy üzerinden /api/apibir yoluna gitsin)
Kullanılacak uçlar:
- /fx/latest?symbols=USD,EUR,GAU → kur kartları
- /indices?codes=XU100 → BIST 100 kartı
- /fuel/prices?city=istanbul → motorin ve benzin fiyatı
- /fx/timeseries?start=..&end=..&symbols=USD → 30 günlük çizgi grafik
Tüm yanıtlar { success, data, creditsRemaining } zarfı içinde döner;
data alanı dizi ya da tarih anahtarlı nesnedir.
İstekler:
1. Chart.js CDN kullan, başka bağımlılık ekleme.
2. Üstte özet kartlar, altta çizgi grafik olsun.
3. 60 saniyede bir setInterval ile tazele.
4. Açık/koyu tema anahtarı ekle, tercihi localStorage'a yazma — sadece state'te tut.
5. Hata durumunda kullanıcıya anlaşılır Türkçe mesaj göster, konsola requestId bas.
6. Türkçe sayı biçimlendirmesi kullan (toLocaleString('tr-TR')).
Çıktı: tek bir index.html dosyası, açıklama yok, sadece kod.2. Günlük Resmi Gazete özet botu
Zamanlanmış görevle her sabah çalışır, sektörünüzü ilgilendiren maddeleri süzüp Slack veya e-postaya gönderir.
Her sabah 09:00'da çalışacak bir Node.js betiği yaz.
1. apibir'in /official-gazette/today ucunu çağır
(Authorization: apikey <ANAHTAR>, topics=vergi,is-hukuku,kvkk).
2. importance alanı "high" veya "medium" olan maddeleri filtrele.
3. Her madde için: başlık, 2 cümlelik özet, yürürlük tarihi ve kaynak bağlantısı.
4. Sonucu Slack Incoming Webhook'una Block Kit formatında gönder.
5. Hiç madde yoksa "Bugün ilgili düzenleme yok." mesajı at.
6. 429 alırsan Retry-After kadar bekleyip 3 kez tekrar dene.
7. Anahtarları process.env'den oku, hiçbir sırrı koda gömme.
Ayrıca bu betiği her hafta içi 09:00'da çalıştıran bir GitHub Actions
workflow dosyası da üret.3. Veri analizi ve rapor
Ham API çıktısını alıp yorumlayan, tablo ve grafik üreten analitik prompt. Excel veya PDF çıktısı isteyebilirsiniz.
apibir'in /fx/timeseries ucundan son 12 ayın USD/TRY ve EUR/TRY
serisini çek (aylık son iş günü kapanışları).
Sonra:
1. Aylık yüzdesel değişimleri hesapla.
2. Yıllık toplam değer kaybını, en volatil ayı ve standart sapmayı bul.
3. Aynı dönemde /rates/policy ucundan TCMB politika faizini çek ve
faiz değişimleriyle kur hareketini aynı grafikte kıyasla.
4. Bulguları 5 maddelik bir yönetici özetine dönüştür.
5. Çıktıyı iki sekmeli bir Excel dosyası olarak ver:
"Veri" sekmesinde ham tablo, "Özet" sekmesinde grafik ve yorum.
Sayıları uydurma; yalnızca API'den dönen değerleri kullan.
Veri eksikse hangi tarihlerin boş olduğunu açıkça belirt.4. Maliyet ve fiyatlandırma asistanı
İşletme verinizi apibir verisiyle birleştirip karar önerisi üretir. Reçete, filo veya envanter dosyanızı ekleyin.
Elimde bir restoran menüsünün reçete dosyası var (ürün, malzeme, gramaj).
1. apibir'in /hal/prices ucundan İstanbul Bayrampaşa hali güncel
fiyatlarını çek.
2. Her reçete için porsiyon maliyetini hesapla.
3. Hedef gıda maliyet oranım %28. Buna göre önerilen satış fiyatını bul.
4. Mevcut menü fiyatımla karşılaştır; marjı hedefin dışında kalan
ürünleri kırmızı ile işaretle.
5. Son 30 günde fiyatı %15'ten fazla artan malzemeleri ayrı bir
"risk listesi" olarak ver ve alternatif malzeme öner.
Çıktı: koşullu biçimlendirmeli tek bir Excel dosyası ve
en kritik 3 aksiyonu içeren kısa bir not.İpucu: Prompt'un başına https://api.apibir.com/v1/openapi.json şemasını
yapıştırırsanız model parametre adlarını tahmin etmek zorunda kalmaz. Şema büyükse yalnızca
kullanacağınız uçların bölümünü verin.
Tek dosyalık piyasa panosu
Yapay zeka asistanınızın ürettiği 1. prompt çıktısı ve güvenli backend proxy şablonu.
Panonun Canlı Görünümü
1. İstemci Kodu (index.html)
HTML, CSS ve Chart.js ile yazılmış tek dosyalık ön yüz şablonu.
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="utf-8">
<title>Piyasa Panosu</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js@4"></script>
<style>
body { font-family: system-ui, sans-serif; margin: 0; background: #f7f8fc; color: #0d1425; }
.wrap { max-width: 1100px; margin: 0 auto; padding: 24px; }
.cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px; }
.card { background: #fff; border: 1px solid #e4e8f1; border-radius: 14px; padding: 18px; }
.card b { display: block; font-size: 1.7rem; letter-spacing: -.02em; }
.up { color: #06a988; } .down { color: #e11d48; }
canvas { background: #fff; border: 1px solid #e4e8f1; border-radius: 14px; padding: 14px; margin-top: 18px; }
</style>
</head>
<body>
<div class="wrap">
<h1>Piyasa Panosu</h1>
<p id="ts"></p>
<div class="cards" id="cards"></div>
<canvas id="grafik" height="110"></canvas>
</div>
<script>
// UYARI: Anahtarı tarayıcıya gömmeyin. Kendi backend'inizde
// /api/proxy uç noktası açıp isteği oradan yapın.
const PROXY = "/api/apibir"; // backend proxy adresiniz
async function cek(path, params = {}) {
const url = new URL(PROXY + path, location.origin);
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
const r = await fetch(url);
const j = await r.json();
if (!j.success) throw new Error(j.error.message);
return j.data;
}
function kart(baslik, deger, degisim, birim = "") {
const yon = degisim >= 0 ? "up" : "down";
const ok = degisim >= 0 ? "▲" : "▼";
return `
${baslik}
${deger.toLocaleString("tr-TR", { maximumFractionDigits: 2 })}${birim}
${ok} ${Math.abs(degisim).toFixed(2)}%
`;
}
async function yenile() {
const [kur, endeks, yakit] = await Promise.all([
cek("/fx/latest", { symbols: "USD,EUR,GAU" }),
cek("/indices", { codes: "XU100" }),
cek("/fuel/prices", { city: "istanbul" })
]);
document.getElementById("cards").innerHTML =
kur.map(k => kart(k.name, k.selling, k.changePercent, " ₺")).join("") +
kart(endeks[0].name, endeks[0].value, endeks[0].changePercent) +
kart("Motorin (İstanbul)", yakit[0].prices.motorin, 0, " ₺");
document.getElementById("ts").textContent =
"Son güncelleme: " + new Date().toLocaleTimeString("tr-TR");
}
async function grafikCiz() {
const seri = await cek("/fx/timeseries", {
start: new Date(Date.now() - 30 * 864e5).toISOString().slice(0, 10),
end: new Date().toISOString().slice(0, 10),
symbols: "USD"
});
const etiketler = Object.keys(seri);
const degerler = etiketler.map(g => seri[g].USD);
new Chart(document.getElementById("grafik"), {
type: "line",
data: {
labels: etiketler,
datasets: [{
label: "USD/TRY",
data: degerler,
borderColor: "#2445e6",
backgroundColor: "rgba(36,69,230,.08)",
fill: true,
tension: .3,
pointRadius: 0
}]
},
options: { plugins: { legend: { display: false } }, scales: { x: { ticks: { maxTicksLimit: 8 } } } }
});
}
yenile();
grafikCiz();
setInterval(yenile, 60000); // 60 saniyede bir tazele
</script>
</body>
</html>2. Backend Proxy Kodu (Zorunlu)
API anahtarını koruyan ve 30 saniyelik revalidation önbelleği sağlayan sunucu proxy'si.
// app/api/apibir/[...path]/route.js (Next.js App Router)
// Anahtarı sunucuda tutan basit proxy — tarayıcıya asla sızmaz.
const IZINLI = new Set([
"/fx/latest", "/fx/timeseries", "/indices",
"/fuel/prices", "/commodities", "/crypto/prices"
]);
export async function GET(request, { params }) {
const yol = "/" + params.path.join("/");
if (!IZINLI.has(yol)) {
return Response.json({ success: false, error: { code: "forbidden" } }, { status: 403 });
}
const url = new URL("https://api.apibir.com/v1" + yol);
new URL(request.url).searchParams.forEach((v, k) => url.searchParams.set(k, v));
const upstream = await fetch(url, {
headers: { Authorization: `apikey ${process.env.APIBIR_KEY}` },
next: { revalidate: 30 } // 30 sn önbellek → kredi tasarrufu
});
return new Response(await upstream.text(), {
status: upstream.status,
headers: { "Content-Type": "application/json", "Cache-Control": "public, max-age=30" }
});
}Modele araç olarak tanıtın
Kendi uygulamanızdaki asistanın canlı veriye erişmesi için tek bir araç tanımı yeterli.
Modelin uç nokta uydurmasını engellemek için enum kullanın.
Araç şeması
{
"name": "apibir_sorgula",
"description": "apibir üzerinden güncel ekonomik ve kamusal veri çeker. Döviz, emtia, faiz, hisse, kripto, endeks, ekonomik takvim, akaryakıt, hal, tarım, sıfır araç, resmi tatil, mevzuat ve Resmi Gazete verileri için kullan.",
"input_schema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Uç nokta yolu. Örn: /fx/latest, /fuel/prices, /official-gazette/today",
"enum": [
"/fx/latest", "/fx/timeseries", "/commodities", "/rates/policy",
"/crypto/prices", "/stocks/us/quote", "/indices", "/calendar/events",
"/fuel/prices", "/hal/prices", "/agriculture/prices", "/holidays",
"/business-days/add", "/vehicles/new/prices", "/legislation/changes",
"/official-gazette/today"
]
},
"params": {
"type": "object",
"description": "Sorgu parametreleri. Örn: {\"symbols\": \"USD,EUR\"} veya {\"city\": \"istanbul\"}",
"additionalProperties": { "type": "string" }
}
},
"required": ["path"]
}
}Uygulama tarafı
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic();
async function apibirSorgula({ path, params = {} }) {
const url = new URL("https://api.apibir.com/v1" + path);
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
const r = await fetch(url, {
headers: { Authorization: `apikey ${process.env.APIBIR_KEY}` }
});
return await r.json();
}
const mesaj = await anthropic.messages.create({
model: "claude-sonnet-4-5",
max_tokens: 2048,
tools: [apibirToolTanimi], // yukarıdaki JSON şema
messages: [{
role: "user",
content: "Bugün İstanbul'da motorin kaç lira ve dolar kuru ne? " +
"İkisini karşılaştıran kısa bir yorum yaz."
}]
});
// Claude tool_use bloğu döndürünce apibirSorgula'yı çağırıp
// sonucu tool_result olarak geri gönderin.Güvenlik notu: Aracı, modelin serbestçe URL oluşturabildiği bir "http_get" haline
getirmeyin. Yol listesini enum ile sınırlayın ve parametreleri sunucu tarafında doğrulayın.
Aksi halde prompt enjeksiyonu ile anahtarınız başka bir adrese gönderilebilir.
MCP sunucusunu bağlayın
apibir MCP sunucusu, 15 servisin tamamını masaüstü asistanınıza araç olarak açar. Yapılandırma dosyanıza şu bloğu ekleyip uygulamayı yeniden başlatın:
{
"mcpServers": {
"apibir": {
"command": "npx",
"args": ["-y", "@apibir/mcp-server"],
"env": {
"APIBIR_KEY": "APIBIR-8f2c4b7e9a1d3c5f7b2e9d41"
}
}
}
}Bağlandıktan sonra doğrudan konuşma dilinde isteyebilirsiniz:
"Son 3 ayda USD/TRY ile TCMB politika faizini
karşılaştıran bir grafik çıkar."
"Bugünkü Resmi Gazete'de vergiyle ilgili ne var?
Madde madde özetle."
"İstanbul, Ankara ve İzmir'de motorin fiyatını
karşılaştır, en ucuz dağıtıcıyı söyle."
"2026'da 15 Ağustos'tan sonraki ilk 10 iş gününü
listele." Ne kazandırır?
Parametre adı ezberlemek yok, kod yazmak yok. Asistan doğru ucu kendisi seçer, sonucu tablo veya grafiğe dönüştürür.
Kredi yönetimi
MCP sunucusu her yanıtta kalan kredinizi gösterir ve varsayılan olarak 60 saniyelik yerel önbellek kullanır; aynı soruyu tekrar sormak kredi harcamaz.
Her gün kendiliğinden çalışan otomasyonlar
Bir asistana kurdurabileceğiniz, sonra unutabileceğiniz görevler.
08:30 · Sabah brifingi
Kur, endeks, akaryakıt ve günün ekonomik takvimi tek e-postada. Bir önceki güne göre değişimler vurgulu.
09:00 · Resmi Gazete özeti
Sektörünüze göre süzülmüş maddeler, yürürlük tarihleriyle birlikte Slack kanalınıza.
10:00 · Hal fiyat raporu
Dün-bugün karşılaştırması, %10'dan fazla değişen ürünler için uyarı satırı.
Zam anında · Yakıt bildirimi
Pompa fiyatı değiştiğinde filo yöneticisine anında bildirim ve güncel sefer maliyeti tablosu.
Cuma 17:00 · Haftalık analiz
Haftanın kur, faiz ve emtia hareketlerini yorumlayan tek sayfalık PDF.
Ay başı · Kapanış paketi
TCMB dönem sonu kurları, iş günü sayıları ve kur farkı tablosu muhasebe ekibine.
Nasıl kurulur? Bir asistana "şu API'yi kullanarak her hafta içi 09:00'da çalışan bir görev oluştur" demeniz yeterli. Betiği kendiniz barındıracaksanız cron, GitHub Actions veya bir sunucusuz fonksiyon (Vercel Cron, AWS EventBridge) kullanabilirsiniz.
İyi sonuç almak için 6 kural
- Şemayı verin. Uç nokta ve parametre adlarını tahmin ettirmeyin; OpenAPI parçasını prompt'a ekleyin.
- Örnek yanıt gösterin. Bir gerçek JSON örneği, on satır açıklamadan daha etkilidir.
- "Sayı uydurma" deyin. Veri gelmiyorsa boş bırakmasını, uydurmamasını açıkça isteyin.
- Anahtarı prompt'a yazmayın. Ortam değişkeninden okumasını söyleyin; sohbet geçmişleri sızabilir.
- Önbelleği isteyin. "30 saniye önbellekle" cümlesi kredi faturanızı ciddi biçimde düşürür.
- Hata yolunu tarif edin. 429 ve 402 durumlarında ne yapacağını söyleyin, yoksa sessizce çöker.
Ücretsiz API anahtarınızı 30 saniyede alın
Kredi kartı istemiyoruz. Ücretsiz plan tüm API'leri kapsar; yalnızca aylık kredi limiti farklıdır.