İçeriğe geç
Belgeler menüsü

Yazar Haber Ajansı Abone API

Abonenin kendi yazılımı için haber, fotoğraf ve video akışı. Kimlik: Authorization: Bearer yha_canli_… (YHA Abone · Çıkışlar · Anahtarlar). İçerik her zaman paket hakkıyla sınırlıdır. Aynı olay iki kez gelebilir: olay_id ile ayıkla, düzeltmeyi surum_no ile uygula.

Sürüm 1.0.0 · OpenAPI 3.1.0 · dis-v1.json · dis-v1.yaml

SunucuNe
https://api.<alan>Canlı
https://deneme.<alan>Deneme ortamı (yha_deneme_ anahtarı, örnek içerik)

Akış

GET/v1/akis

Olaylar eskiden yeniye (imleçli) · kapsam akis.oku

İmleç yoksa baslangic ya da son 24 saatten başlar; en çok 7 gün geri gidilir. devami_var yanlışsa en erken 10 saniye sonra yeniden sor.

ParametreYerTürAçıklama
imlecquerystringÖnceki yanıtın sonraki_imlec değeri
baslangicquerystringISO 8601 ya da YYYY-AA-GG
boyutqueryinteger
icerikqueryhaber · fotograf · video
kategori_idquerystring[]
il_idqueryinteger
oncelikqueryflas · onemli · normal[]
olayqueryyeni · duzeltme · iptal · guncelleme[]
paket_idquerystring
YanıtAçıklamaGövde
200Başarılıapplication/json DisOlayListesi
400dogrulama_hatasiapplication/json DisHata
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Anahtar

GET/v1/ben

Anahtar, kurum, paketler ve sınırlar · kapsam akis.oku

YanıtAçıklamaGövde
200Başarılıapplication/json DisBen
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Anlık akış

GET/v1/olaylar

Anlık akış (sunucu gönderimli olaylar) · kapsam akis.oku

Accept: text/event-stream; Last-Event-ID (ya da ?imlec=) ile kaldığı yerden sürer. Her 25 saniyede : canli yorumu. Uzun kopuklukta yeniden_yukle gönderip kapanır.

ParametreYerTürAçıklama
imlecquerystringÖnceki yanıtın sonraki_imlec değeri
icerikqueryhaber · fotograf · video
kategori_idquerystring[]
il_idqueryinteger
oncelikqueryflas · onemli · normal[]
olayqueryyeni · duzeltme · iptal · guncelleme[]
paket_idquerystring
YanıtAçıklamaGövde
200Sunucu gönderimli olaylar; her olayın data alanı DisOlaytext/event-stream string
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
406kabul_edilemezapplication/json DisHata
429es_zamanli_baglanti_siniri, gunluk_sinir_doldu, yavaslaapplication/json DisHata

Arama

GET/v1/ara

Arşivde arama (kanal hakkıyla) · kapsam arsiv.ara

ParametreYerTürAçıklama
q *querystring
icerikquerytumu · haber · fotograf · video
kategori_idquerystring[]
il_idqueryinteger
baslangicquerystringISO 8601 ya da YYYY-AA-GG
bitisquerystringISO 8601 ya da YYYY-AA-GG
boyutqueryinteger
imlecquerystring
YanıtAçıklamaGövde
200Başarılıapplication/json DisAramaSonucu
400dogrulama_hatasiapplication/json DisHata
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Belge

GET/v1/openapi.json

OpenAPI 3.1 belgesi (anahtarsız) · anahtarsız

YanıtAçıklamaGövde
200Başarılıapplication/json nesne

Canlı yayın

GET/v1/canli-yayinlar

Canlı yayınlar (süren ya da son 7 günde biten; adres yok) · kapsam akis.oku

ParametreYerTürAçıklama
durumquerycanli · bitti
YanıtAçıklamaGövde
200Başarılıapplication/json CanliYayinListesi
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

GET/v1/canli-yayinlar/{id}

Canlı yayın · kapsam akis.oku

ParametreYerTürAçıklama
id *pathstringCanlı yayın kimliği
YanıtAçıklamaGövde
200Başarılıapplication/json CanliYayin
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
404bulunamadiapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Durum

GET/v1/durum

Servis durumu, açık olaylar ve planlı bakımlar

Abone servislerinin durumu ve kullanıcılara duyurulmuş açık olaylar. Kök neden ve izleme alarmları yanıtta yoktur.

YanıtAçıklamaGövde
200Başarılıapplication/json DisDurum
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disiapplication/json DisHata
404bulunamadiapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Eklenti

GET/v1/eklentiler/{kod}/guncel

Eklentinin güncel sürümü (anahtarsız) · anahtarsız

WordPress eklentisinin güncelleme kanalı. surum kurulu sürümdür; en düşük desteklenen sürümün altındaysa zorunlu: true. Paket Ed25519 ile imzalıdır (imza, base64).

ParametreYerTürAçıklama
kod *pathstringEklenti kodu (yha-haber)
kanalquerykararli · deneme
surumquerystring
YanıtAçıklamaGövde
200Başarılıapplication/json DisEklentiSurumu
400dogrulama_hatasiapplication/json DisHata
404eklenti_yokapplication/json DisHata

Entegrasyon

PUT/v1/entegrasyon

Bağlantının durum bildirimi (WordPress eklentisi, bağlayıcı, kendi yazılımı) · kapsam akis.oku

Bağlantı kendini tanıtır: yazılım ve eklenti sürümü, site adresi, kip, sayaçlar ve son hatalar. Kayıt anahtardan bulunur; ilk bildirim entegrasyonu açar ya da kuruluyordan calisiyora geçirir. sonraki_bildirim_saniyeden sık gelen bildirim yazılmaz (son yanıt döner).

YanıtAçıklamaGövde
200Başarılıapplication/json DisEntegrasyonYaniti
400dogrulama_hatasiapplication/json DisHata
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, gelistirici_yalnizca_deneme, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
409entegrasyon_kaldirildi, entegrasyon_uyusmuyorapplication/json DisHata
413govde_cok_buyukapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Haberler

GET/v1/haberler

Haber listesi (yeniden eskiye) · kapsam akis.oku

ParametreYerTürAçıklama
baslangicquerystringISO 8601 ya da YYYY-AA-GG
bitisquerystringISO 8601 ya da YYYY-AA-GG
kategori_idquerystring[]
il_idqueryinteger
oncelikqueryflas · onemli · normal[]
durumqueryserviste · iptal_edildi
paket_idquerystring
dilquerystring[]
boyutqueryinteger
imlecquerystring
YanıtAçıklamaGövde
200Başarılıapplication/json DisHaberListesi
400dogrulama_hatasiapplication/json DisHata
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

GET/v1/haberler/{id}

Haber (servisteki son sürüm) · kapsam akis.oku

Kimlik yerine numara da kabul edilir (H-001230). ETag ve If-None-Match ile 304.

ParametreYerTürAçıklama
id *pathstringHaber kimliği ya da numarası
YanıtAçıklamaGövde
200Başarılıapplication/json DisHaber
304Değişmedi (If-None-Match)
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disiapplication/json DisHata
404bulunamadiapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

DELETE/v1/haberler/{id}/yayinladim

"Yayınladım" işaretini kaldırır · kapsam akis.oku

ParametreYerTürAçıklama
id *pathstringHaber kimliği ya da numarası
YanıtAçıklamaGövde
200Başarılıapplication/json DisYayinIsaretiYaniti
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disiapplication/json DisHata
404bulunamadiapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

PUT/v1/haberler/{id}/yayinladim

"Yayınladım" işareti · kapsam akis.oku

Kurum haberi kendi yayınında kullandığını bildirir (WordPress eklentisi yazıyı yayımlayınca kendiliğinden gönderir). Habere sonradan kabul edilmiş hukuki cevap ya da düzeltme yayımlanırsa yalnızca işaretleyen kurumlara değişiklik bildirimi gider. Yinelenebilir: yeniden gönderim adresi günceller. Bir kurum başka kurumun işaretini göremez.

ParametreYerTürAçıklama
id *pathstringHaber kimliği ya da numarası
YanıtAçıklamaGövde
200Başarılıapplication/json DisYayinIsaretiYaniti
400dogrulama_hatasiapplication/json DisHata
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disiapplication/json DisHata
404bulunamadiapplication/json DisHata
409icerik_iptalapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

MCP

DELETE/v1/mcp

MCP oturum sonu (durumsuz kipte etkisiz) · kapsam mcp.kullan

YanıtAçıklamaGövde
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
405Gövdesiz
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

GET/v1/mcp

MCP akışı (durumsuz kipte açılmaz: 405) · kapsam mcp.kullan

YanıtAçıklamaGövde
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
405Gövdesiz
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

POST/v1/mcp

MCP sunucusu (akışlı HTTP, durumsuz) · kapsam mcp.kullan

Araçlar: son_haberler, haber_ara, haber_getir, kategoriler, iller. Yalnızca tools/call çağrı sayılır.

YanıtAçıklamaGövde
200Başarılıapplication/json nesne
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Medya

GET/v1/varliklar

Tek başına servis edilen medya · kapsam akis.oku

ParametreYerTürAçıklama
turqueryfotograf · video · foto_360 · video_360
baslangicquerystringISO 8601 ya da YYYY-AA-GG
bitisquerystringISO 8601 ya da YYYY-AA-GG
kategori_idquerystring[]
il_idqueryinteger
boyutqueryinteger
imlecquerystring
YanıtAçıklamaGövde
200Başarılıapplication/json DisVarlikListesi
400dogrulama_hatasiapplication/json DisHata
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

GET/v1/varliklar/{id}

Fotoğraf, video ya da belge · kapsam akis.oku

ParametreYerTürAçıklama
id *pathstringMedya kimliği ya da numarası (F-000386, V-000412, B-000017)
YanıtAçıklamaGövde
200Başarılıapplication/json DisVarlik
304Değişmedi (If-None-Match)
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disiapplication/json DisHata
404bulunamadiapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

GET/v1/varliklar/{id}/dosya

Dosya (303 ile imzalı adrese yönlendirir) · kapsam icerik.indir

Kopya hazırlanıyorsa 202 hazirlaniyor ve Retry-After. İndirilen fotoğraf ve video aylık indirme kotasına girer; belge (PDF, tek seçenek orijinal) girmez.

ParametreYerTürAçıklama
id *pathstringMedya kimliği ya da numarası
secenekquerykucuk · web · orijinal · 1080p · 720p · 480p · kapak | string
YanıtAçıklamaGövde
202Kopya hazırlanıyor (Retry-After)application/json nesne
303İmzalı dosya adresine yönlendirme (Location)
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yok, paket_disiapplication/json DisHata
404bulunamadiapplication/json DisHata
409icerik_iptal, kota_dolduapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

GET/v1/varliklar/{id}/goruntuleyici

360° görüntüleyici yanıtı (döşemeler ya da video) · kapsam icerik.indir

Yalnızca 360° fotoğraf ve videoda. Döşeme adresleri doseme.adres_kalibindan kurulur; döşeme istekleri API kotasına girmez, jeton başına dakikalık sınıra girer. Jeton süresi dolunca bu uç yeniden çağrılır.

ParametreYerTürAçıklama
id *pathstringMedya kimliği ya da numarası (YHA-360-000412)
YanıtAçıklamaGövde
200Başarılıapplication/json DisGoruntuleyici
401anahtar_gecersiz, anahtar_gerekliapplication/json DisHata
403kapsam_yok, paket_disiapplication/json DisHata
404bulunamadiapplication/json DisHata
409kuresel_degilapplication/json DisHata
429yavaslaapplication/json DisHata

Sözlük

GET/v1/sozluk/iller

İller ve ilçeler · kapsam akis.oku

YanıtAçıklamaGövde
200Başarılıapplication/json DisSozlukIller
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

GET/v1/sozluk/kategoriler

Kategoriler · kapsam akis.oku

YanıtAçıklamaGövde
200Başarılıapplication/json DisSozlukKategoriler
401anahtar_gecersiz, anahtar_gerekli, anahtar_iptal, anahtar_ortami_uyusmuyor, anahtar_suresi_dolduapplication/json DisHata
403abonelik_askida, abonelik_yok, ag_disi, deneme_kisiti, kanal_paketinde_yok, kapsam_yokapplication/json DisHata
429gunluk_sinir_doldu, yavaslaapplication/json DisHata

Webhook

Webhook olayı (Standard Webhooks imzalı)

Başlıklar: webhook-id (yeniden denemelerde aynı), webhook-timestamp (Unix saniye), webhook-signature: v1,<base64 HMAC-SHA256>. İmzalanan metin <webhook-id>.<webhook-timestamp>.<ham gövde>; anahtar whsec_ önekinden sonraki base64 çözülmüş baytlar. Olay türleri: haber.yeni, haber.duzeltme, haber.iptal, varlik.yeni, varlik.iptal, varlik.guncelleme, sinama.ping.

Gövde: WebhookGovdesi · ayrıntı: Webhook kılavuzu

Şemalar

CanliYayin

Canlı yayın (abonelere açılmış; anahtarın paketlerinde görülen). Adres taşımaz

AlanTürAçıklama
idstring
nostringCY-000041
baslikstring | null
aciklamastring | null
kategoriDisKategori | null
ilDisIl | null
kaynakobject
durumcanli · yeniden_baglaniyor · bitti
baslama_zamanistring | null
bitis_zamanistring | null
kayit_varlik_idstring | nullKayıt videosu servise verildiyse (GET /v1/varliklar/:id)

CanliYayinListesi

Canlı yayınlar (süren ya da son 7 günde biten)

AlanTürAçıklama
ogelerCanliYayin[]

CanliYayinOlayi

Webhook canlı yayın olayı (abonelere açıldığında ve bittiğinde; oynatma ya da akış adresi yok)

AlanTürAçıklama
olay_idstring
olaybasladi · bitti
zamanstringISO 8601, UTC
icerik"canli_yayin"
canli_yayinCanliYayin

DisAdres

İmzalı, süreli dosya adresi

AlanTürAçıklama
adresstring
son_gecerlilik_zamanistringISO 8601, UTC

DisAramaSonucu

Arama sonucu

AlanTürAçıklama
ogelerobject[]
sonraki_imlecstring | null
devami_varboolean

DisBen

Anahtar, kurum, paketler ve sınırlar

AlanTürAçıklama
anahtarobject
kurumobject
abonelikobject
paketlerDisPaket[]
sinirlarobject
kotaobject

DisDurum

Abone servislerinin durumu, kullanıcılara duyurulmuş açık olaylar ve planlı bakımlar

AlanTürAçıklama
servislerobject[]
acik_olaylarobject[]
bakim_duyurulariobject[]

DisDuzeltme

Düzeltme kaydı

AlanTürAçıklama
zamanstringISO 8601, UTC
surum_nointeger
notstring | null

DisEklentiSurumu

Eklentinin güncel sürümü ve imzalı paketi (Ed25519); eklenti kurmadan önce SHA-256 ve imzayı doğrular

AlanTürAçıklama
kodstring
surumstring
yayim_zamanistring | null
gereken_wordpressstring
gereken_phpstring
sinanan_wordpressstring | null
indirme_adresistring
sha256string | null
imzastring | null
boyut_baytinteger | null
notlarstring | null
en_dusuk_surumstring | null
zorunluboolean

DisEmbargo

Önceden verilen embargolu içerik: yayım serbest zamanı

AlanTürAçıklama
zamanstringISO 8601, UTC
suruyorboolean

DisEntegrasyonBildirimi

Bağlantının kendini tanıtması ve durum bildirimi (WordPress eklentisi her eşitleme döngüsünde; kişi verisi yok)

AlanTürAçıklama
entegrasyon_id (isteğe bağlı)string | null
turwordpress_eklentisi · baglayici · kendi_yazilimi
yazilim (isteğe bağlı)object | null
eklenti (isteğe bağlı)object | null
calisma_ortami (isteğe bağlı)object | null
site_adresi (isteğe bağlı)string | null
webhook_adresi (isteğe bağlı)string | null
kip (isteğe bağlı)webhook · cekme | null
yayin_bicimi (isteğe bağlı)taslak · dogrudan | null
zamanlayici (isteğe bağlı)wp_cron · sistem_cron · diger | null
son_cekme_zamani (isteğe bağlı)string | null
son_olay_zamani (isteğe bağlı)string | null
esleme (isteğe bağlı)object | null
sayaclar (isteğe bağlı)object | null
hatalar (isteğe bağlı)object[] | null

DisEntegrasyonYaniti

Entegrasyonun durumu, bir sonraki bildirimin zamanı, eklenti sürümü ve uyarılar

AlanTürAçıklama
entegrasyon_idstring | null
durumkuruluyor · calisiyor · hata · kaldirildi | null
sonraki_bildirim_saniyeinteger
eklentiobject | null
webhookobject | null
uyarilarobject[]

DisGoruntuleyici

360° görüntüleyici yanıtı (Faz 20): gömme döşemeleri ya da gömme videosu (2560 × 1280), filigran otomatik çıkış kuralıyla

AlanTürAçıklama
varlik_idstring
no_metnistringYHA-360-000412
turfoto_360 · video_360
durumhazir · hazirlaniyor · yok
izdusumesdikdortgen
kaynak_olcusuobject
acilisobject
sinirlarobject
tabanDisKureselAdres | null
dosemeobject | null
videoobject | null
kapakDisKureselAdres | null
kucuk_resimDisKureselAdres | null
yazi_katmaniobject
baslikstring | null
imzastring

DisHaber

Haber (servisteki son sürüm). İptalde govde, spot ve medya boştur

AlanTürAçıklama
idstring
nostringH-001230
surum_nointeger
durumserviste · iptal_edildi
turobject
oncelikflas · onemli · normal
baslikstring
spotstring | null
etiketlerstring[]
kategoriDisKategori | null
ilDisIl | null
ilceDisIlce | null
imzastring
kaynak_kurumobject | null
ilk_servis_zamanistringISO 8601, UTC
servis_zamanistringISO 8601, UTC
embargoDisEmbargo | null
kullanimobject
tanitimboolean
iptalobject | null
zincir_idstring | null
dil (isteğe bağlı)stringHaberin dili (BCP 47 dil alt etiketi: tr, en, ar; Faz 22)
ceviri (isteğe bağlı)object | nullÇeviri haberinde Türkçe aslı (Faz 22); Türkçe haberde null
adresstring
deneme (isteğe bağlı)booleanYalnızca deneme ortamında: true
govdestring
duzeltmelerDisDuzeltme[]
medyaDisVarlik[]Yalnızca erişilebilen medya; paket dışı medya ve sayısı yoktur

DisHaberListesi

Haber listesi (yeniden eskiye)

AlanTürAçıklama
ogelerDisHaberOzet[]
sonraki_imlecstring | null
devami_varboolean

DisHaberOzet

Liste satırı (gövde, düzeltmeler ve medya yerine erişilebilen medya sayısı)

AlanTürAçıklama
idstring
nostringH-001230
surum_nointeger
durumserviste · iptal_edildi
turobject
oncelikflas · onemli · normal
baslikstring
spotstring | null
etiketlerstring[]
kategoriDisKategori | null
ilDisIl | null
ilceDisIlce | null
imzastring
kaynak_kurumobject | null
ilk_servis_zamanistringISO 8601, UTC
servis_zamanistringISO 8601, UTC
embargoDisEmbargo | null
kullanimobject
tanitimboolean
iptalobject | null
zincir_idstring | null
dil (isteğe bağlı)stringHaberin dili (BCP 47 dil alt etiketi: tr, en, ar; Faz 22)
ceviri (isteğe bağlı)object | nullÇeviri haberinde Türkçe aslı (Faz 22); Türkçe haberde null
adresstring
deneme (isteğe bağlı)booleanYalnızca deneme ortamında: true
medya_sayisiobject

DisHata

Hata biçimi (Faz 1) ve hata kodunun belge adresi

AlanTürAçıklama
hataobject

DisIl

İl (plaka kodu)

AlanTürAçıklama
idinteger
adstring

DisIlce

İlçe

AlanTürAçıklama
idinteger
adstring

DisKategori

Ajans kategorisi

AlanTürAçıklama
idstring
kodstring
adstring

DisKuresel

360° içeriğin izdüşümü, açılış görünümü (derece) ve görüntüleyici yanıtının adresi

AlanTürAçıklama
izdusumesdikdortgen
acilisobject
goruntuleyici_adresistringGET /v1/varliklar/:id/goruntuleyici (kapsam icerik.indir)

DisKureselAdres

Görüntüleyicinin imzalı, süreli dosya adresi (taban, kapak, küçük resim, video, şerit)

AlanTürAçıklama
adresstring | null
bitis_zamanistring | null
onbellek_anahtaristring
genislikinteger | null
yukseklikinteger | null
boyut_baytinteger
bicimstring | null
mimestring | null
sure_msinteger | null
onbellege_alinabilirboolean

DisOlay

Akış olayı. Aynı olay iki kez gelebilir: olay_id ile ayıkla, düzeltmeyi surum_no ile uygula

AlanTürAçıklama
olay_idstring
imlecstring
olayyeni · duzeltme · iptal · guncelleme
zamanstringISO 8601, UTC
icerikhaber · fotograf · video · foto_360 · video_360
haberDisHaber | null
varlikDisVarlik | null

DisOlayListesi

Akış sayfası (eskiden yeniye)

AlanTürAçıklama
ogelerDisOlay[]
sonraki_imlecstring | null
devami_varboolean

DisPaket

Anahtarın kapsadığı paket

AlanTürAçıklama
idstring
kodstring
adstring
ozetstring
kanallarstring[]
metinboolean
fotografboolean
videoboolean
tum_kategorilerboolean
kategori_idleristring[]
turkiye_geneliboolean
il_idleriinteger[]
arsiv_baslangicstring | null

DisSecenek

İndirilebilir kopya seçeneği; boyut ve filigran kopya bu kurum için hazırsa dolu

AlanTürAçıklama
secenekkucuk · web · orijinal · 1080p · 720p · 480p · kapak | string360 fotoğrafta kucuk, kapak, web, orijinal; 360 videoda kapak ve 3840x1920, 1920x960 (Faz 20)
genislikinteger | null
yukseklikinteger | null
bicimstring | null
boyut_baytinteger | null
filigranliboolean | null

DisSinama

Uyumluluk sınaması (deneme ortamında, anahtara özel altı adım)

AlanTürAçıklama
idstring
adstring
durumsuruyor · tamamlandi · suresi_doldu · iptal
sonucuyumlu · uyumsuz · eksik | null
baslangic_zamanistringISO 8601, UTC
son_gecerlilik_zamanistringISO 8601, UTC
bitis_zamanistring | null
yayin_bicimitaslak · dogrudan
anahtarobject
baglantiobject | null
adimlarDisSinamaAdimi[]

DisSinamaAdimi

Uyumluluk sınamasının bir adımı: yayılan içerik, sunucunun gözlemi, bağlantının raporu, insan onayı

AlanTürAçıklama
nointeger
kodyeni_icerik · duzeltme · iptal · embargo_kullanim · kaynak · yayin_bicimi
adstring
yayilma_zamanistring | null
icerikobject | null
gozlemobject
raporobject | null
elleobject | null
sonucbekliyor · gecti · elle_gecti · kaldi

DisSinamaListesi

Anahtarın son 20 uyumluluk sınaması

AlanTürAçıklama
ogelerDisSinama[]

DisSozlukIller

İller ve ilçeleri

AlanTürAçıklama
ogelerobject[]

DisSozlukKategoriler

Kategoriler

AlanTürAçıklama
ogelerDisKategori[]

DisVarlik

Fotoğraf, video ya da belge (PDF; tek seçenek orijinal, filigransız; indirme kotasına girmez)

AlanTürAçıklama
idstring
nostringF-000386, V-000412, B-000017 (belge), YHA-360-000412 (360°)
turfotograf · video · belge · foto_360 · video_360belge: PDF eki (Faz 15); hakkı metin hakkıdır. foto_360, video_360: 360° (Faz 20; hakkı icerik_360)
durumserviste · geri_cekildi
baslikstring | null
altyazistring | null
kategoriDisKategori | null
ilDisIl | null
ilceDisIlce | null
yer_adistring | null
cekim_zamanistring | null
servis_zamanistring | null
imzastring
hak_sahibistring | null
kullanim_kisitistring | null
tanitimboolean
genislikinteger | null
yukseklikinteger | null
sure_msinteger | null
sayfa_sayisi (isteğe bağlı)integer | nullYalnızca belgede: PDF sayfa sayısı
kucuk_resimDisAdres | null
seceneklerDisSecenek[]
kuresel (isteğe bağlı)DisKuresel | nullYalnızca 360 türlerinde dolu (Faz 20); düz türlerde null
dosya_adresistring
bagli_haberobject | null
deneme (isteğe bağlı)booleanYalnızca deneme ortamında: true

DisVarlikListesi

Tek başına servis edilen medya

AlanTürAçıklama
ogelerDisVarlik[]
sonraki_imlecstring | null
devami_varboolean

DisYayinIsareti

"Yayınladım" işareti: haber kurumun yayınında kullanıldı; habere hukuki cevap ya da düzeltme yayımlanırsa kuruma bildirilir

AlanTürAçıklama
adres (isteğe bağlı)string | nullHaberin kurumun sitesindeki adresi
yayim_zamani (isteğe bağlı)string | nullKurumun yayımladığı an (ISO 8601)
kaynak (isteğe bağlı)wordpress_eklentisi · kendi_yazilimi | null

DisYayinIsaretiYaniti

Kurumun bu haberdeki "Yayınladım" işareti (yoksa null)

AlanTürAçıklama
haber_idstring
yayinlandiobject | null

WebhookGovdesi

Webhook gövdesi (Standard Webhooks imzalı): webhook-id, webhook-timestamp, webhook-signature

AlanTürAçıklama
surum1
olay_turuhaber.yeni · haber.duzeltme · haber.iptal · varlik.yeni · varlik.iptal · varlik.guncelleme · canli_yayin.basladi · canli_yayin.bitti · sinama.ping
zamanstringISO 8601, UTC
denemeboolean
govde_kesildi (isteğe bağlı)boolean
veriDisOlay | CanliYayinOlayi | object | object

Yazar Haber Ajansı API ile Haber Çekme: Kimlik Doğrulama, JSON ve Örnek Kodlar

Yazar Haber Ajansı API (Abone API'si), servis edilen haberleri, fotoğrafları ve videoları HTTPS üzerinden JSON olarak çekmenizi sağlayan bir REST arayüzüdür. Kök adres https://api.yha.com.tr/v1'dir; her istek Authorization: Bearer <anahtar> başlığı taşır. API ile haber çekmek için paketinizde API kanalı açık bir YHA aboneliği, YHA Abone'de ürettiğiniz anahtar ve HTTP isteği gönderebilen herhangi bir programlama dili yeterlidir. Bu sayfada kimlik doğrulamadan hata yönetimine kadar tüm akışı ve curl, PHP, Python örneklerini bulacaksınız.

API, YHA entegrasyon seçenekleri içinde en esnek olanıdır: akışı imleçle kaldığınız yerden okur, kategoriye, ile, önceliğe ve içerik türüne göre süzer, arşivde arama yapar ve sonuçları kendi içerik yönetim sisteminize istediğiniz biçimde aktarırsınız. Diğer yöntemlerle karşılaştırma için Yazar Haber Ajansı geliştirici belgeleri ana sayfasına bakabilirsiniz.

Bu sayfa bir özettir. Uçların, parametrelerin ve yanıt şemalarının tam listesi OpenAPI 3.1 belgesindedir: https://api.yha.com.tr/v1/openapi.json (anahtarsız).

API'yi ne zaman kullanmalısınız?

API ile haber çekmek özellikle şu durumlarda doğru tercihtir:

  • Kendi yazdığınız ya da özel geliştirilmiş bir haber yazılımınız varsa.
  • Haberleri kategori, il, öncelik veya tarih aralığına göre seçici biçimde almak istiyorsanız.
  • Mobil uygulama, ekran veya bülten sistemi gibi birden fazla kanala aynı veriyi dağıtıyorsanız.
  • Düzeltmeleri ve iptalleri otomatik olarak yansıtmanız gerekiyorsa.

Yalnızca bir besleme okuyabiliyorsanız YHA RSS ve Atom beslemeleri daha hızlı kurulur. WordPress kullanıyorsanız ajansın eklentisi bu API'yi sizin yerinize kullanır.

Kimlik doğrulama

Her istek Authorization: Bearer <anahtar> başlığı taşır. Anahtar sorgu dizgesinde kabul edilmez; böylece sunucu günlüklerine ve vekil sunuculara düşmez.

GET /v1/ben HTTP/1.1
Host: api.yha.com.tr
Authorization: Bearer yha_canli_...

Anahtarları YHA Abone · Çıkışlar · Anahtarlar ekranında siz üretirsiniz; anahtar yalnızca bir kez gösterilir. İki ortam vardır:

Ön ek Ortam Kök
yha_canli_ Canlı https://api.yha.com.tr/v1
yha_deneme_ Deneme ortamı (örnek içerik) https://deneme.yha.com.tr/v1

Canlı anahtar deneme adresinde, deneme anahtarı canlıda 401 anahtar_ortami_uyusmuyor alır. Canlı anahtar için kurumunuz adına API kullanım şartları bir kez onaylanır. Anahtarın kapsamı hangi uçları açacağını belirler: akis.oku (akış, anlık akış, haberler, varlıklar, sözlükler), icerik.indir (medya dosyası) ve arsiv.ara (arama). İçerik her zaman paket hakkınızla sınırlıdır. Ayrıntılar: Kimlik ve anahtarlar.

API anahtarı için güvenlik kuralları:

  • Anahtarı yalnızca sunucu tarafında kullanın. Tarayıcıdan (CORS) istek zaten kabul edilmez; mobil uygulama paketine veya herkese açık bir Git deposuna da koymayın.
  • Anahtarı kodun içine yazmak yerine ortam değişkeninde (YHA_ANAHTAR gibi) veya bir gizli bilgi yöneticisinde saklayın.
  • Anahtarı daraltın: en çok 20 IP bloğu, anahtara özel günlük sınır, paket kısıtı ve son kullanma tarihi tanımlayabilirsiniz.
  • Anahtar sızarsa YHA Abone'den hemen iptal edin ve yenisini üretin. Planlı değişimde "Döndür" yeni anahtar üretir; eskisi seçtiğiniz geçiş süresince (0–168 saat, varsayılan 24) çalışmaya devam eder.

Temel uçlar

Bütün okuma uçları GET'tir; yanıtlar UTF-8 JSON, zamanlar ISO 8601 UTC'dir.

Uç Ne verir
GET /v1/ben Anahtar, kurum, paketler ve sınırlar (ilk deneme için ideal)
GET /v1/akis Servis edilen içeriğin olayları, eskiden yeniye, imleçli
GET /v1/olaylar Anlık akış (sunucu gönderimli olaylar)
GET /v1/haberler Haber listesi, yeniden eskiye
GET /v1/haberler/{id} Haberin servisteki son sürümü (kimlik ya da H-001230 gibi numara)
GET /v1/varliklar, GET /v1/varliklar/{id} Tek başına servis edilen medya; fotoğraf, video ya da belge
GET /v1/varliklar/{id}/dosya Medya dosyası (303 ile süreli, imzalı adrese yönlendirir)
GET /v1/ara Arşivde arama
GET /v1/sozluk/kategoriler, GET /v1/sozluk/iller Kategori ve il sözlükleri
PUT /v1/haberler/{id}/yayinladim Haberi yayınınızda kullandığınızı bildirir; habere sonradan hukuki cevap ya da düzeltme gelirse yalnızca işaretleyen kurumlara bildirim gider

Süzgeçler: akışta icerik (haber, fotograf, video), kategori_id (sözlükteki kategori kimlikleri, virgülle birden fazla), il_id (plaka, 1–81), oncelik (flas, onemli, normal), olay (varsayılan yeni,duzeltme,iptal), paket_id ve boyut (varsayılan 50, en çok 100). /v1/haberler ayrıca baslangic, bitis (ISO 8601 ya da YYYY-AA-GG), durum ve dil alır; /v1/ara zorunlu q (1–300 karakter) ile çalışır.

Tarih parametrelerinde saat dilimli bir ISO 8601 değer gönderecekseniz URL içinde + işaretini %2B olarak kodlayın; aksi halde birçok sunucu + karakterini boşluk olarak yorumlar.

Akış ve imleç (sayfa numarası yoktur)

YHA'da sayfa numarası ve toplam sayı yoktur; bütün listeler imleçlidir. Yanıt { "ogeler", "sonraki_imlec", "devami_var" } biçimindedir. Akışta döngü şöyledir:

  1. İlk istekte imleç vermeyin: akış son 24 saatten (ya da baslangic'tan) başlar; en çok 7 gün geri gidilir. Daha eskisi için /v1/haberler ve /v1/ara kullanılır.
  2. Yanıttaki sonraki_imlec'i saklayın ve bir sonraki istekte ?imlec= olarak verin.
  3. devami_var doğruysa hemen yeniden sorun; yanlışsa en erken 10 saniye bekleyin. Daha sık soran dakikalık sınıra takılır.

Ayrıntılı anlatım: Akış ve imleç.

JSON yanıt örneği

Yanıtlar UTF-8 kodludur ve RFC 8259 JSON standardına uyar. Akıştaki her öğe bir olaydır (DisOlay); olay alanı yeni, duzeltme, iptal ya da guncelleme olabilir. Aşağıda kısaltılmış bir akış yanıtı görüyorsunuz:

{
  "ogeler": [
    {
      "olay_id": "…",
      "imlec": "MjAyNi0xMC0wN1Qx…",
      "olay": "duzeltme",
      "zaman": "2026-10-07T11:19:00Z",
      "icerik": "haber",
      "haber": {
        "id": "…",
        "no": "H-001230",
        "surum_no": 2,
        "durum": "serviste",
        "oncelik": "normal",
        "baslik": "…",
        "spot": "…",
        "govde": "…",
        "kategori": { "id": "…", "kod": "ekonomi", "ad": "Ekonomi" },
        "il": { "id": 61, "ad": "Trabzon" },
        "imza": "…",
        "ilk_servis_zamani": "2026-10-07T10:02:00Z",
        "servis_zamani": "2026-10-07T11:19:00Z",
        "embargo": null,
        "kullanim": { "kaynak_gosterme_notu": "…", "kullanim_kisiti": null },
        "tanitim": false,
        "iptal": null,
        "duzeltmeler": [ { "zaman": "2026-10-07T11:19:00Z", "surum_no": 2, "not": "…" } ],
        "medya": []
      },
      "varlik": null
    }
  ],
  "sonraki_imlec": "MjAyNi0xMC0wN1Qx…",
  "devami_var": false
}

En önemli kurallar: haber kimliğini (id) veritabanınızda benzersiz anahtar olarak saklayın, aynı olay iki kez gelebileceği için olay_id'yi ayıklayın ve düzeltmeyi yalnızca surum_no sizdekinden büyükse uygulayın. İptalde govde, spot ve medya boş gelir; haberi yayından kaldırın. Alanların tamamı geliştirici belgelerindeki haber veri modeli bölümünde özetlenir.

Örnek kodlar

curl

export YHA_ANAHTAR=yha_deneme_...
curl -s "https://deneme.yha.com.tr/v1/ben" -H "Authorization: Bearer $YHA_ANAHTAR"
curl -s "https://deneme.yha.com.tr/v1/akis?boyut=50" -H "Authorization: Bearer $YHA_ANAHTAR"
curl -s "https://deneme.yha.com.tr/v1/akis?imlec=$IMLEC" -H "Authorization: Bearer $YHA_ANAHTAR"

PHP

<?php
$kok     = getenv('YHA_KOK') ?: 'https://deneme.yha.com.tr';
$anahtar = getenv('YHA_ANAHTAR');
$dosya   = __DIR__ . '/imlec.txt';
$imlec   = is_file($dosya) ? trim(file_get_contents($dosya)) : '';

$sorgu = ['boyut' => 100] + ($imlec !== '' ? ['imlec' => $imlec] : []);
$ch = curl_init($kok . '/v1/akis?' . http_build_query($sorgu));
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $anahtar, 'Accept: application/json'],
]);
$yanit = curl_exec($ch);
$durum = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$g = json_decode((string) $yanit, true);
if ($durum !== 200) {
    error_log('YHA API: ' . $durum . ' ' . ($g['hata']['kod'] ?? ''));
    exit(1);
}
foreach ($g['ogeler'] as $olay) {
    // olay_id ile ayıkla, haber id'sine göre ekle, düzelt ya da kaldır
    echo $olay['olay'], ' ', $olay['haber']['no'] ?? $olay['varlik']['no'], PHP_EOL;
}
if ($g['sonraki_imlec']) {
    file_put_contents($dosya, $g['sonraki_imlec']);
}

Python

import os, time, requests

KOK = os.environ.get("YHA_KOK", "https://deneme.yha.com.tr")
OTURUM = requests.Session()
OTURUM.headers["Authorization"] = f"Bearer {os.environ['YHA_ANAHTAR']}"
imlec = oku_imlec()  # kendi deponuzdan

while True:
    y = OTURUM.get(f"{KOK}/v1/akis", params={"imlec": imlec, "boyut": 100}, timeout=30)
    if y.status_code == 429:
        time.sleep(int(y.headers.get("Retry-After", "10")))
        continue
    y.raise_for_status()
    g = y.json()
    for olay in g["ogeler"]:
        isle(olay)  # olay_id ile ayıkla, surum_no ile düzelt, iptalde kaldır
    if g["sonraki_imlec"]:
        imlec = g["sonraki_imlec"]
        yaz_imlec(imlec)
    if not g["devami_var"]:
        time.sleep(10)

Daha kapsamlı başvuru bağlayıcıları (Python, JavaScript, PHP, C#) imleç, ayıklama, düzeltme, iptal, embargo, kaynak notu ve medya indirmeyi doğru yapar; entegrasyon kitinde bulunur.

Medya dosyalarını indirme

haber.medya yalnızca paketinizin açtığı medyayı taşır. Dosyayı GET /v1/varliklar/{id}/dosya?secenek=web ile alırsınız: 303 ile süreli, imzalı bir adrese yönlendirilirsiniz (curl -L). İmzalı adrese giderken Authorization başlığını taşımayın. Kopya hazırlanıyorsa 202 ve Retry-After gelir; o kadar bekleyip yeniden deneyin. Seçenekler fotoğrafta kucuk, web, orijinal; videoda 1080p, 720p, 480p'dir. İndirilen fotoğraf ve video aylık indirme kotasına girer; aynı dosya 24 saat içinde yeniden indirilirse düşmez. İptal edilen içeriğin dosyası verilmez (409 icerik_iptal).

HTTP durum kodları ve hata biçimi

API sonucu standart HTTP durum kodlarıyla bildirir; anlamları RFC 9110 HTTP Semantics belgesinde tanımlıdır, MDN HTTP durum kodları sayfası da iyi bir başvuru kaynağıdır. Bütün hatalar aynı gövdeyle gelir:

{ "hata": { "kod": "kapsam_yok", "mesaj": "Bu anahtarın bu uç için kapsamı yok.", "belge": "…", "kapsam": "icerik.indir" } }

mesaj Türkçedir ve değişebilir; yazılımınız kod'a bakmalıdır. Her yanıtta X-YHA-Istek başlığı vardır; destek isterken bu değeri verin. Sık görülen kodlar:

HTTP Kod Ne yapmalısınız?
304 — If-None-Match ile sordunuz, değişiklik yok; önbelleği kullanın
400 dogrulama_hatasi alanlar hangi parametrenin neden reddedildiğini söyler (ör. imlec_gecersiz)
401 anahtar_gerekli, anahtar_gecersiz, anahtar_iptal, anahtar_suresi_doldu, anahtar_ortami_uyusmuyor Başlığı ve anahtarı kontrol edin; gerekirse yeni anahtar üretin
403 kanal_paketinde_yok, paket_disi, kapsam_yok, ag_disi, abonelik_askida Paketiniz, anahtar kapsamı ya da IP listesi bu isteğe izin vermiyor
404 bulunamadi Kimlik ya da numara yok
409 kota_doldu, icerik_iptal İndirme kotası doldu ya da içerik iptal edildi
429 yavasla, gunluk_sinir_doldu Retry-After kadar bekleyin
500 sunucu_hatasi Kısa süre sonra yeniden deneyin; sürerse X-YHA-Istek değeriyle bildirin

Tam liste: Hatalar.

Sınırlar, 429 ve geri çekilme

Dakikalık istek sınırı anahtar başına varsayılan 120'dir (anahtara özel olabilir). Aşımda sunucu RFC 6585 ile tanımlanan 429 Too Many Requests kodunu yavasla hata koduyla döndürür ve Retry-After başlığında beklemeniz gereken süreyi verir. Kurumun günlük API çağrısı paketinizde yazılıdır; dolduğunda 429 gunluk_sinir_doldu gelir ve sınır Türkiye saatiyle gece yarısı sıfırlanır. Deneme ortamında sınır dakikada 30, günde 2.000 istektir.

Her yanıtta kalan hakkınızı görebilirsiniz:

Başlık Ne
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset Dakikalık sınır, bu dakikada kalan, sıfırlanmaya saniye
X-YHA-Gunluk-Sinir, X-YHA-Gunluk-Kalan Günlük sınır ve bugün kalan
Retry-After 429 ve 202'de bekleme süresi (saniye)

Her anahtarlı istek bir çağrıdır (304 dahil); reddedilen istek sayılmaz. İyi bir istemci 429'da Retry-After'a uyar, 5xx'te bekleme süresini her denemede artırır, belirli bir deneme sayısından sonra durup uyarı üretir. Sık sorgulama yerine değişiklikleri bildirim olarak almak için anlık akışı ya da YHA webhook bildirimlerini kullanabilirsiniz. Ayrıntılar: Sınırlar.

Adım adım senkronizasyon stratejisi

API ile haber çekmeye yeni başlayan ekiplerin en sık yaptığı hata, her çalıştırmada son haberleri baştan çekip hepsini yeniden kaydetmektir. YHA'da doğru yol akışı imleçle okumaktır:

  1. İmleci saklayın. Son işlediğiniz yanıtın sonraki_imlec değerini veritabanında veya küçük bir dosyada tutun.
  2. İmleçten devam edin. Bir sonraki çalıştırmada bu değeri ?imlec= olarak gönderin; tarih hesabı ve örtüşme payı gerekmez.
  3. Olayları ayıklayın. olay_id'yi saklayın; daha önce gördüğünüz olayı atlayın.
  4. Kimliğe göre ekle, düzelt ya da kaldır. Aynı id varsa ve gelen surum_no daha büyükse kaydı güncelleyin; iptal olayında haberi yayından kaldırın; yoksa yeni kayıt oluşturun.
  5. Embargoya uyun. embargo.suruyor doğruysa haberi embargo.zaman gelene kadar yayımlamayın.
  6. İmleci en son ilerletin. Olaylar başarıyla işlendikten sonra imleci yazın. Arada hata olursa bir sonraki çalıştırma aynı noktadan devam eder; tekrar gelen olaylar olay_id ile elenir.

Akış en çok 7 gün geriye gider; sunucunuz daha uzun kapalı kaldıysa eksiği /v1/haberler ile tarih aralığı vererek tamamlayın.

Gelen içeriği güvenli yayımlama

Haber gövdesini sitenizde yayımlamadan önce izin verilen etiketlere (paragraf, başlık, liste, bağlantı, kalın/italik) göre temizlemek iyi bir güvenlik alışkanlığıdır. PHP'de HTML Purifier, Python'da nh3 gibi kütüphaneler bu iş için yaygın olarak kullanılır. Bağlantıların href değerlerinde yalnızca http ve https şemalarına izin verin.

Test ve hata ayıklama

  • İlk denemeleri deneme ortamında yapın; yapay örnek içerik 10 dakikada bir yeni olay üretir. Bkz. Deneme ortamı.
  • Hata durumlarını denemek için yalnızca deneme ortamında X-YHA-Deneme-Hata başlığını gönderin (paket_disi, kota_doldu, yavasla, sunucu_hatasi).
  • curl'de -v ile başlıkları görebilirsiniz; çıktıyı paylaşırken anahtarı gizleyin. Yanıtları jq ile inceleyin.
  • Her isteği adres, durum kodu, hata kodu ve X-YHA-Istek değeriyle kaydedin.
  • Beklenmedik hatalarda önce YHA servis durumu sayfasında devam eden bir olay olup olmadığını kontrol edin.

Önbellekleme ve verimlilik

  • Kategori ve il sözlükleri gibi seyrek değişen verileri önbelleğe alın.
  • Ayrıntı uçları (/v1/haberler/{id}, /v1/varliklar/{id}) ETag verir; If-None-Match ile sorduğunuzda değişiklik yoksa 304 alırsınız. 304 de bir çağrı sayılır.
  • Medyayı her seferinde yeniden indirmeyin; aynı varlığın yerel kopyasını kullanın.
  • İstekleri zaman aşımı değeriyle gönderin; yanıt vermeyen bir bağlantı tüm iş kuyruğunuzu kilitleyebilir.
  • Yanıttaki bilinmeyen alanları ve değerleri yok sayın; bunlar geriye uyumlu eklemelerdir. Kaldırılacak bir uç Deprecation ve Sunset başlıklarıyla önceden duyurulur.

Yapay zekâ asistanlarıyla kullanım

Editörlerinizin Claude Code, Cursor gibi bir yapay zekâ istemcisinden "bugünkü ekonomi haberlerini getir" gibi isteklerle YHA verisine ulaşmasını istiyorsanız, Yazar Haber Ajansı MCP sunucusu aynı içeriği istemcilerin anlayacağı araçlar olarak sunar.

API kavramına yeniyseniz önce API nedir? ve JSON nedir? rehberlerine göz atmanızı öneririz.

Sıkça Sorulan Sorular

Yazar Haber Ajansı API ücretsiz mi?

API, abonelik paketine sözleşmeyle eklenen bir çıkıştır; fiyatlar teklifle verilir. Paketler için YHA abonelik ve paketler sayfasına bakabilir, teklif için başvuru formunu kullanabilirsiniz. Deneme ortamı anahtarı ise kullanım şartları onayı gerektirmez ve aboneliğiniz denemedeyken bile çalışır.

API yanıtları hangi formatta?

Yanıtlar UTF-8 kodlu JSON'dur. XML gerekiyorsa dosya çıkışlarındaki NewsML-G2, NITF ya da ajans XML'i biçimlerini veya RSS/Atom beslemesini kullanabilirsiniz.

Haberleri ne sıklıkla çekmeliyim?

Akışta devami_var yanlış döndüğünde en erken 10 saniye sonra yeniden sorun. Saniyeler içinde almak istiyorsanız anlık akışa (/v1/olaylar) bağlanın ya da webhook kullanın.

API anahtarımı JavaScript ile tarayıcıdan kullanabilir miyim?

Hayır. API tarayıcıdan (CORS) gelen isteği kabul etmez ve tarayıcıya gönderilen her şey ziyaretçiler tarafından görülebilir. İstekleri kendi sunucunuz üzerinden yapın.

Hangi programlama dilini kullanmalıyım?

API dilden bağımsızdır; HTTPS isteği gönderip JSON okuyabilen her dil çalışır. Belgelerde ve entegrasyon kitinde curl, Python, JavaScript, PHP ve C# örnekleri vardır.

Birden fazla anahtar kullanabilir miyim?

Evet. Anahtar kurumunuzundur ve Anahtarlar ekranında birden fazla anahtar üretebilirsiniz; her entegrasyon için ayrı anahtar, sızıntıda yalnızca onu iptal etmenizi ve "son kullanım IP'si" ile kimin kullandığını görmenizi sağlar. İçeriği birden fazla sitede yayımlama hakkı ise abonelik sözleşmenize bağlıdır.

Kaldırılan haberleri nasıl anlarım?

Akışta olay: "iptal" gelir; haberin durum alanı iptal_edildi olur, iptal nesnesi zamanı ve gerekçeyi taşır. iptal.kaldirma doğruysa kaldırma hukuki kaynaklıdır. Her iki durumda da haberi kendi yayınınızdan kaldırın.