Özet: Hukuk, uyum ve operasyon ekiplerinde Resmi Gazete çoğu zaman sabah PDF/HTML tarayarak takip edilir. İlgili kanun maddesi atlanır, mükerrer sayı kaçırılır, Slack'e manuel özet yazılır. Bu yazıda apibir Resmi Gazete & Mevzuat API ile günlük yayını çekmeyi, tür ve anahtar kelime filtresi uygulamayı, AI özeti okumayı ve webhook ile şirket içi bülten otomasyonu kurmayı Node.js / Python örnekleriyle adım adım anlatıyoruz.
İçindekiler
- Neden Resmi Gazete'yi API ile çekmelisiniz?
- Uç noktalar ve alanlar
- Bugünün ve tarih aralığının yayını
- Tür, anahtar kelime ve mükerrer filtreleri
- Belge detayı ve AI özeti
- Webhook ile sabah bülteni
- Slack / Teams ve iş günü API ile birlikte kullanım
- Sık yapılan hatalar
- Sık sorulan sorular
Neden Resmi Gazete'yi API ile Çekmelisiniz?
Resmi Gazete tek bir “haber akışı” değildir. Ürününüzün ihtiyacına göre şu katmanlar ayrı ayrı gelir:
- Yayın meta — tarih, sayı, mükerrer bilgisi.
- Belge türü — kanun, yönetmelik, tebliğ, Cumhurbaşkanı kararı, ilân vb.
- İçerik — başlık, özet, tam metin veya PDF bağlantısı.
- Etki sinyali — sektör/etiket ve (varsa) AI özeti.
Manuel takipte tipik kırılmalar:
- Gecikme: Gece yayımlanan sayı sabah e-postaya geç düşer.
- Gürültü: İlânlar ile kritik yönetmelikler aynı listede karışır.
- İzlenebilirlik yok: “Bu madde geçen ay değişti mi?” sorusuna arşiv yoksa yanıt veremezsiniz.
API tabanlı kurgu üçünü birden çözer: yayın anına yakın JSON, sunucu tarafı filtre ve webhook ile olay bazlı bildirim.
Uç Noktalar ve Alanlar
Temel adres: https://api.apibir.com/v1
| Uç | Ne döner |
|---|---|
GET /gazette/today |
Bugünün (veya son yayımlanan) Resmi Gazete paketini |
GET /gazette/issues |
Tarih aralığındaki sayılar ve belge listesi |
GET /gazette/documents/{id} |
Tek belge detayı, özet ve bağlantılar |
GET /gazette/search |
Tür / anahtar kelime / sayı araması |
POST /gazette/webhooks |
Yeni sayı veya eşleşen belge bildirimi |
Kimlik doğrulama tüm apibir uçlarında aynıdır:
Authorization: apikey APIBIR-8f2c...9d41
Accept: application/json
Yanıt zarfı diğer servislerle ortaktır: success, data, creditsUsed, creditsRemaining. Her başarılı istek 1 kredi harcar; 4xx hataları kredi düşürmez. Arama ve geniş tarih aralıklarında kredi tüketimi dokümantasyondaki tabloya göre artabilir.
1. Adım: Bugünün ve Tarih Aralığının Yayını
cURL — bugün
curl --request GET \
--url "https://api.apibir.com/v1/gazette/today" \
--header "authorization: apikey APIBIR-8f2c...9d41" \
--header "accept: application/json"
Node.js (fetch)
async function bugununGazetesi() {
const res = await fetch("https://api.apibir.com/v1/gazette/today", {
headers: { authorization: `apikey ${process.env.APIBIR_KEY}` }
});
if (!res.ok) throw new Error(`apibir ${res.status}`);
const { data } = await res.json();
return data;
}
const bugun = await bugununGazetesi();
console.log(bugun.date, bugun.number, bugun.documents?.length);
Python
import os, requests
HEADERS = {"authorization": f"apikey {os.environ['APIBIR_KEY']}"}
def gazette_today():
r = requests.get(
"https://api.apibir.com/v1/gazette/today",
headers=HEADERS,
timeout=15,
)
r.raise_for_status()
return r.json()["data"]
def gazette_issues(start, end):
r = requests.get(
"https://api.apibir.com/v1/gazette/issues",
params={"start": start, "end": end},
headers=HEADERS,
timeout=15,
)
r.raise_for_status()
return r.json()["data"]
issue = gazette_today()
print(issue["date"], issue.get("number"), len(issue.get("documents", [])))
Örnek yanıt iskeleti (dokümantasyondaki şemaya uygun):
{
"success": true,
"creditsUsed": 1,
"timestamp": "2026-09-14T08:15:00+03:00",
"data": {
"date": "2026-09-14",
"number": "33370",
"isSupplement": false,
"documents": [
{
"id": "rg-2026-09-14-yonetmelik-12",
"type": "yonetmelik",
"title": "… Yönetmeliğinde Değişiklik Yapılmasına Dair Yönetmelik",
"section": "yurutme",
"summary": "Kısa AI özeti…",
"url": "https://www.resmigazete.gov.tr/…"
}
]
}
}
isSupplement mükerrer / ek sayı bilgisini taşır. Ürün kuralınızda mükerrerleri ayrı kart olarak gösterin; ana sayı ile birleştirmek denetimde karışıklık yaratır.
2. Adım: Tür, Anahtar Kelime ve Mükerrer Filtreleri
Hukuk panosunda tüm ilânları göstermek gürültü yaratır. Sunucu tarafı filtreler:
def kritik_belgeler(start, end, keywords="vergi,ithalat,iş sağlığı"):
r = requests.get(
"https://api.apibir.com/v1/gazette/search",
params={
"start": start,
"end": end,
"types": "kanun,yonetmelik,cb_karar,teblig",
"q": keywords,
"includeSupplements": "true",
},
headers=HEADERS,
timeout=15,
)
r.raise_for_status()
return r.json()["data"]
for doc in kritik_belgeler("2026-09-01", "2026-09-14"):
print(doc["date"], doc["type"], doc["title"][:80])
JavaScript — pano kartı
function mevzuatKartlari(docs) {
return docs.map((d) => ({
baslik: d.title,
tur: d.type,
tarih: d.date,
sayi: d.number,
ozet: d.summary,
link: d.url,
}));
}
Sık kullanılan sorgu parametreleri:
| Parametre | Örnek | Açıklama |
|---|---|---|
start / end |
2026-09-01 |
Tarih aralığı |
types |
kanun,yonetmelik |
Belge türü filtresi |
q |
KDV,ithalat |
Başlık / özet anahtar kelime |
includeSupplements |
true |
Mükerrer / ek sayıları dahil et |
section |
yasama, yurutme, yargi |
Bölüm filtresi |
Görünen başlık metnine göre ürün kuralı yazmayın; mümkünse type + sabit anahtar kelime listesi kullanın. Başlıklar kaynakta güncellenebilir.
3. Adım: Belge Detayı ve AI Özeti
Listeden seçilen kaydın tam özeti ve bağlantıları için /gazette/documents/{id} kullanılır.
curl --request GET \
--url "https://api.apibir.com/v1/gazette/documents/rg-2026-09-14-yonetmelik-12" \
--header "authorization: apikey APIBIR-8f2c...9d41"
def belge_detay(doc_id):
r = requests.get(
f"https://api.apibir.com/v1/gazette/documents/{doc_id}",
headers=HEADERS,
timeout=15,
)
r.raise_for_status()
return r.json()["data"]
doc = belge_detay("rg-2026-09-14-yonetmelik-12")
print(doc.get("summary"), doc.get("pdfUrl") or doc.get("url"))
summary alanı AI destekli kısa özettir; denetim klasörüne ham PDF'i de pdfUrl / url ile saklayın. Özet tek başına kanıt yerine geçmez — bağlantıyı ve sayı bilgisini birlikte arşivleyin.
4. Adım: Webhook ile Sabah Bülteni
Poll yerine olay bazlı abonelik için POST /gazette/webhooks kullanılır. Yeni sayı yayımlandığında veya filtreye uyan belge geldiğinde Slack, Teams veya kendi endpoint'inize JSON düşer.
curl --request POST \
--url "https://api.apibir.com/v1/gazette/webhooks" \
--header "authorization: apikey APIBIR-8f2c...9d41" \
--header "content-type: application/json" \
--data '{
"url": "https://hooks.example.com/apibir-gazette",
"types": ["kanun", "yonetmelik", "cb_karar", "teblig"],
"q": ["vergi", "KDV", "ithalat", "iş sağlığı"],
"includeSupplements": true
}'
Python — gelen webhook'u işle
import json
from http.server import BaseHTTPRequestHandler
class Handler(BaseHTTPRequestHandler):
def do_POST(self):
length = int(self.headers.get("Content-Length", 0))
body = json.loads(self.rfile.read(length))
payload = body.get("data") or body
docs = payload.get("documents") or [payload]
lines = [f"*Resmi Gazete {payload.get('date')} — Sayı {payload.get('number')}*"]
for d in docs[:15]:
lines.append(f"• [{d.get('type')}] {d.get('title')}")
text = "\n".join(lines)
# requests.post(os.environ["SLACK_WEBHOOK"], json={"text": text}, timeout=10)
print(text)
self.send_response(204)
self.end_headers()
Aynı deseni Resmi Gazete özetlerini Slack / Teams bültenine dönüştürme yazımızda da kullanmıştık; bu rehber kaynağı (API uçlarını) netleştirir. Kod yazmadan takip isteyen ekipler için apibir'in günlük hukuk & mevzuat bülteni aynı veriyi WhatsApp veya e-posta olarak iletir.
5. Adım: Slack / Teams ve İş Günü API ile Birlikte Kullanım
Gazete “ne yayımlandı?” sorusunu cevaplar; “bugün iş günü mü?” ve “makro takvimde ne var?” soruları ayrı servislerdedir:
- Hafta sonu / resmi tatilde boş beklememek → Resmi Tatiller & İş Günü API ile çekim günlerinizi süzün.
- Vergi / faiz kararları günü → Ekonomik Takvim API ile açıklama saatini çapraz doğrulayın.
- Kur etkisi olan kararlar → karar sonrası Döviz Kurları API ile panoyu yenileyin.
def sabah_pipeline(is_is_gunu, gazette_fn):
"""Yalnızca iş günlerinde gazete bülteni üret."""
if not is_is_gunu:
return None
return gazette_fn()
Ürün kuralınızı “gazete + iş günü + (isteğe bağlı) takvim” üçlüsü olarak yazın; tek kaynağa güvenmek yerine çapraz kontrol denetimde işe yarar.
Sık Yapılan Entegrasyon Hataları
| Hata | Sonucu | Doğrusu |
|---|---|---|
| Tüm ilânları kritik listede göstermek | Kullanıcı yönetmeliği kaçırır. | types + q filtresi veya ayrı sekmeler. |
| Mükerrer sayıyı yok saymak | Ek kararı kaçırmak. | includeSupplements=true, isSupplement alanı. |
| Yalnızca AI özetini arşivlemek | Denetimde kanıt zayıf kalır. | Sayı + tarih + resmi URL/PDF birlikte. |
| Her sayfa yüklemesinde geniş arama | Gereksiz kredi tüketimi. | Günü önbelleğe alın; webhook ile yenileyin. |
| Başlık metnine göre kırılgan kural | Metin değişince alarm susar. | type + anahtar kelime listesi. |
Sık Sorulan Sorular
Veriler ne sıklıkla güncellenir?
Resmi Gazete yayımlanınca paket API'de görünür; webhook abonelikleriniz yeni sayı veya filtre eşleşmesinde tetiklenebilir. Ücretsiz planda aylık kredi limiti geçerlidir.
Webhook zorunlu mu?
Hayır. Poll ile /gazette/today veya /gazette/issues yeterlidir; düşük gecikme ve kredi tasarrufu için sabah bülteni veya kritik anahtar kelimelerde webhook tercih edin.
Mükerrer sayılar nasıl gelir?
isSupplement alanı ve includeSupplements parametresi ile. Ana sayı ile birleştirmeden ayrı kayıt olarak işleyin.
Kod yazmadan takip edebilir miyim?
Evet. Günlük Resmi Gazete ve mevzuat takip otomasyonu kritik kararları WhatsApp veya e-posta ile iletebilir. Kapsam için hizmetler ve teklif formuna bakın.
Başlamak için: Ücretsiz plan 100 kredi/ay ile geliştirme ve deneme için yeterlidir. Uç noktaların tamamı Resmi Gazete & Mevzuat API kapsamında; kimlik doğrulama ve hata kodları dokümantasyonda yer alır.