Uptime Status
Outage
Kaynak: http://api:8080/v1/healthz + http://api:8080/v1/status
HaberAPI, yayın ekipleri için operasyon motorudur. Bu sayfa; kaynak toplama, normalize etme, SEO enrich ve API/Webhook dağıtımının teknik olarak nasıl kurulduğunu gösteren ana geliştirici girişidir.
Metrikler canlı probe ve veritabanı agregasyonundan üretilir. Son doğrulama: 09.04.2026 05:11:47.
Outage
Kaynak: http://api:8080/v1/healthz + http://api:8080/v1/status
2063ms
Kaynak: http://api:8080/v1/healthz (live probe)
N/A
Kaynak: PostgreSQL public.articles
Not: Flow metric could not be computed
Ürünü değerlendiren ekipler için karar akışını iki lane olarak netleştiriyoruz: Developer lane ve Enterprise lane.
HaberAPI bir haber sitesi değil, yayıncı operasyon motorudur. Akış her tenant için aynı standartla çalışır.
Adım 1
Kaynaklar
Adım 2
Normalize
Adım 3
SEO Enrich
Adım 4
API / Webhook
Sekmeli örnek istek + tek tık kopyala + canlı response preview.
curl -s "https://haberapi.com.tr/v1/status" \
-H "Accept: application/json"Live Response Preview
{}API'yi kullanmak için önce portal kaydı açıp ücretsiz paket ile API anahtarı oluşturun.Kayıt ol ve ilk key'i oluşturarak devam edin.
curl -X GET "https://haberapi.com.tr/v1/articles?limit=5" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: application/json"TypeScript / JavaScript
npm install haber-sdk-tsPython
pip install haber-sdkİçerik ve veri endpointleri için X-API-Key, portal endpointleri için Authorization: Bearer kullanılır.
# Her istekte API anahtarınızı gönderin
X-API-Key: hk_live_xxxxxxxxxxxxxxxxxxxxx# Portal endpointleri için JWT
Authorization: Bearer eyJhbGciOi...Güvenlik: API anahtarını client-side bundle içine koymayın. İstekleri her zaman backend servisiniz üzerinden yönetin.
Public tenant sözleşmesi canlı olarak /v1/openapi.json üzerinden yayınlanır. Internal/admin operasyonları ayrı internal sözleşmede tutulur.
Landing üzerinde öne çıkan ürün alanları ve canlı endpoint grupları aşağıdadır.
| Grup | Auth | Örnek Endpointler |
|---|---|---|
| Articles | X-API-Key |
|
| Radar | X-API-Key |
|
| Search & Analytics | X-API-Key |
|
| Portal | Bearer JWT |
|
| Operational | X-API-Key veya Bearer JWT |
|
Arama için üç farklı yüzey sunulur. Kullanım senaryonuza göre doğru endpointi seçmeniz entegrasyon hızını ve sonuç kalitesini artırır.
| Endpoint | Ne Zaman Kullanılır? | Özet |
|---|---|---|
GET /v1/search | Basit query string ile hızlı arama gerektiğinde. | Tek satır sorgu, hızlı prototipleme ve dashboard filtreleri için idealdir. |
POST /v1/search | Çoklu filtre, sıralama ve semantic/hybrid arama gerektiğinde. | DSL payload ile gelişmiş sorgu akışı kurar; üretim segmentasyonu için önerilir. |
GET /v1/search/articles | Articles odaklı daha açık path yapısı tercih edildiğinde. | Arama sonucu doğrudan article listesi olarak döner; legacy/path-based entegrasyonlarla uyumludur. |
Query string üzerinden hızlı arama yapar. En temel kullanımda q ve limit parametreleri yeterlidir.
curl -G "https://haberapi.com.tr/v1/search" \
--data-urlencode "q=ekonomi" \
--data-urlencode "limit=5" \
--data-urlencode "cursor=" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: application/json"Filtre ve ranking ihtiyacı arttığında DSL kullanın. Bu yöntem özellikle tenant bazlı üretim kurallarında daha kontrollü sonuç verir.
Not: Bu endpointte desteklenen ana alanlar query.must,query.should, filters,size, cursor vesemantic'tir.
curl -X POST "https://haberapi.com.tr/v1/search" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"query": {
"must": ["deprem hazırlık"],
"should": ["risk azaltma"]
},
"filters": {
"categories": ["Gündem"],
"tags": ["afet"]
},
"size": 10,
"semantic": false
}'Path ayrımıyla articles aramasını açıkça ifade etmek isteyen ekipler için uygundur. Özellikle route-level izleme ve cache kuralı ayrımında tercih edilir.
curl -G "https://haberapi.com.tr/v1/search/articles" \
--data-urlencode "q=teknoloji" \
--data-urlencode "limit=10" \
--data-urlencode "sort=published_at:desc" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: application/json"Kaldırılan içeriklerde 404 yerine200 + tombstone döner. Client tarafında tombstone=true geldiğinde içerik render etmeyin verequest_ref değerini audit kaydına alın.
{
"tombstone": true,
"resource": "article",
"id": "uuid-or-string",
"status": "removed",
"reason_code": "COPYRIGHT_DMCA",
"reason_public": "Bu içerik telif nedeniyle kaldırılmıştır.",
"removed_at": "2026-02-19T10:00:00Z",
"expires_at": null,
"appeal_url": "https://haberapi.com.tr/docs/takedown",
"request_ref": "TD-2026-000123",
"meta": {
"policy_version": "2026-01",
"jurisdiction": "OTHER",
"source": "internal_review"
}
}reason_code enum:
COPYRIGHT_DMCA, COPYRIGHT_LOCAL, LEGAL, PRIVACY, POLICY, CUSTOMER_REQUEST, OTHER
{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key",
"request_id": "req_abc123"
}
}| HTTP Kodu | Hata Kodu | Açıklama |
|---|---|---|
| 400 | BAD_REQUEST | Geçersiz istek parametreleri |
| 401 | UNAUTHORIZED | Geçersiz veya eksik API anahtarı |
| 403 | FORBIDDEN | Erişim yetkisi yok |
| 429 | RATE_LIMITED | Rate limit aşıldı |
| 500 | INTERNAL_ERROR | Sunucu hatası |
Her yanıtta limit ve kota bilgileri header olarak döner:
| Header | Açıklama |
|---|---|
| X-RateLimit-Limit | Dakika başına maksimum istek |
| X-RateLimit-Remaining | Mevcut pencere için kalan istek |
| Retry-After | 429 sonrası tekrar deneme süresi (saniye) |
| X-Quota-Limit | Aylık toplam kota |
| X-Quota-Remaining | Kalan aylık istek hakkı |
Webhook'lar, önemli olaylar gerçekleştiğinde belirlediğiniz URL'ye HTTP POST gönderir.
quota.exceeded aylık kota dolduğundasaved_search.match saved-search eşleşmesi bulunduğundaarticle.enriched makale enrichment süreci tamamlandığındaradar.* radar trend/black-swan eventleri oluştuğundawebhook.test portal test webhook tetiklendiğindeimport crypto from 'crypto';
function verifySignature(
timestamp: string,
payload: string,
signature: string,
secret: string
) {
const signed = `${timestamp}.${payload}`;
const expected = crypto.createHmac('sha256', secret).update(signed).digest('hex');
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}X-Request-Id loglara kaydediliyor.Public sözleşme yalnızca tenant-facing API'yi kapsar. Internal/admin operasyonları ayrı, yetki korumalı sözleşmede tutulur.
Hayır. REST API'yi doğrudan kullanabilirsiniz. SDK'lar sadece hata yönetimi ve entegrasyon hızını iyileştirmek için önerilir.
Evet. Kurumsal entegrasyon ve onboarding içiniletişim ekibine ulaşabilirsiniz.