Cihan Haber Ajansı

Geliştirici Portalı

CHA içeriklerini kendi sitenize, uygulamanıza veya iş zekası panonuza taşıyın.

Kimlik Doğrulama

Kamuya açık uçlar için kimlik doğrulama gerekmez. Kurumsal /api/public/wire/* uçları için Müşteri Portalınızdan API anahtarı üretin.

X-API-Key: cha_...
# veya
Authorization: Bearer cha_...

REST · Kurumsal Wire (kimlik doğrulamalı)

GET /api/public/wire/articles
  ?limit=20&offset=0
  &category=politika
  &wire_type=flash|urgent|analysis|opinion|interview|photo|video|podcast
  &license=editorial|commercial|royalty_free|exclusive
  &region=TR&priority=3&breaking=true
  &from=2026-01-01T00:00:00Z&to=2026-12-31T23:59:59Z
  &q=Türkiye

Yanıt: { data, meta: { limit, offset, count, remaining } }. Başlıklar: X-RateLimit-Limit, X-RateLimit-Remaining. 429 durumunda Retry-After.

REST · Kamuya Açık Haberler

GET /api/public/articles?limit=20&category=politika&breaking=true

JSON Feed / RSS / Sitemaps

GET /api/public/feed.json
GET /rss.xml
GET /news-sitemap.xml
GET /image-sitemap.xml
GET /video-sitemap.xml
GET /api/public/podcasts.xml
GET /sitemap.xml

Hata Kodları

  • 401 · missing_api_key · invalid_api_key · expired_api_key
  • 403 · inactive_subscription
  • 429 · rate_limited
  • 500 · server_error

Örnek — Node.js

const res = await fetch("https://cihanhaberajansi.com/api/public/wire/articles?limit=5&breaking=true", {
  headers: { "X-API-Key": process.env.CHA_API_KEY },
});
if (res.status === 429) console.warn("Retry-After:", res.headers.get("Retry-After"));
const { data, meta } = await res.json();
console.log(meta.remaining, data);

Örnek — Python

import os, requests
r = requests.get(
  "https://cihanhaberajansi.com/api/public/wire/articles",
  params={"limit": 10, "wire_type": "flash"},
  headers={"X-API-Key": os.environ["CHA_API_KEY"]},
)
r.raise_for_status()
for a in r.json()["data"]:
    print(a["title"])

Örnek — Webhook doğrulama (HMAC-SHA256)

import { createHmac, timingSafeEqual } from "crypto";
const sig = req.headers["x-cha-signature"];
const expected = createHmac("sha256", process.env.CHA_WEBHOOK_SECRET)
  .update(rawBody).digest("hex");
if (!timingSafeEqual(Buffer.from(sig), Buffer.from(expected)))
  throw new Error("Invalid signature");

Hız Limitleri

  • Trial: 100/gün · Basic: 1.000/gün
  • Professional: 10.000/gün · Enterprise: 100.000/gün
  • Kamu: 50.000/gün · Özel: sözleşmeye bağlı