Ana Sayfa / Blog / Mevzuat & Hukuk
Mevzuat & Hukuk

Resmi Gazete API Entegrasyonu: Kanun, Yönetmelik ve Cumhurbaşkanı Kararlarını Otomatik Takip Etmek

Yazar: apibir Geliştirici Ekibi 8 dk okuma süresi

Ö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

  1. Neden Resmi Gazete'yi API ile çekmelisiniz?
  2. Uç noktalar ve alanlar
  3. Bugünün ve tarih aralığının yayını
  4. Tür, anahtar kelime ve mükerrer filtreleri
  5. Belge detayı ve AI özeti
  6. Webhook ile sabah bülteni
  7. Slack / Teams ve iş günü API ile birlikte kullanım
  8. Sık yapılan hatalar
  9. 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

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.

← Tüm Blog Yazılarına Dön Ücretsiz API Anahtarı Al