API Dokümantasyonu
RBL Watch REST API referansı. Tüm endpoint'ler JSON formatında yanıt döner.
Hızlı Başlangıç
API anahtarınızı Ayarlar sayfasından oluşturabilirsiniz. Aşağıdaki örnekle hemen test edebilirsiniz:
curl -H "Authorization: Bearer YOUR_API_KEY" https://rbl.watch/api/ips
Tüm istekler https://rbl.watch temel URL'si üzerinden yapılır.
Kimlik Doğrulama
Session Cookie (Web)
Tarayıcı üzerinden giriş yaptığınızda otomatik olarak rbl_session cookie'si oluşturulur. Web arayüzü bu yöntemi kullanır.
API Key (Programatik Erişim)
Tüm API isteklerinde Authorization header'ı ile API anahtarınızı göndermeniz gerekir:
Authorization: Bearer <api_key>
Rate Limiting
API istekleri plan bazında sınırlandırılmıştır. Aşılan limitler 429 Too Many Requests yanıtı döner.
| Plan | İstek / dakika | Tarama / gün |
|---|---|---|
| Ücretsiz | - | 5 |
| Pro | 60 | 100 |
| Business | 120 | 500 |
| Enterprise | 300 | Sınırsız |
Yanıt header'larında X-RateLimit-Remaining ve X-RateLimit-Reset bilgileri yer alır.
IP Yönetimi
/api/ips
IP listesi
page : int - Sayfa numarasi (varsayilan: 1) size : int - Sayfa boyutu (varsayilan: 20) status : string - Filtre: clean, listed, unknown service_tag : string - Servis etiketi filtresi search : string - IP veya hostname arama
{
"items": [
{
"id": 1,
"ip_address": "192.168.1.10",
"hostname": "mail.example.com",
"service_tag": "mail-server",
"status": "clean",
"last_scan_at": "2026-03-27T10:30:00Z",
"listed_count": 0
}
],
"total": 42,
"page": 1,
"size": 20
}
/api/ips
Yeni IP ekle
{
"ip_address": "192.168.1.10",
"hostname": "mail.example.com",
"service_tag": "mail-server",
"description": "Ana mail sunucusu"
}
{
"id": 2,
"ip_address": "192.168.1.10",
"hostname": "mail.example.com",
"service_tag": "mail-server",
"status": "unknown",
"created_at": "2026-03-27T10:30:00Z"
}
/api/ips/{id}
IP sil
{ "ok": true }
Başarılı silme işleminde 204 No Content döner.
/api/ips/bulk
CSV ile toplu import
Pro+
file : CSV dosyası (ip_address, hostname, service_tag, description sütunları)
{
"imported": 15,
"skipped": 2,
"errors": []
}
/api/ips/cidr
CIDR blok import
Pro+
{
"cidr": "192.168.1.0/28",
"service_tag": "web-servers",
"description": "Web sunucu blogu"
}
{
"imported": 14,
"skipped": 0,
"cidr": "192.168.1.0/28"
}
/api/ips/export/csv
CSV export
Tüm IP'leri CSV formatında indirir. Yanıt Content-Type: text/csv header'ı ile döner.
Tarama
/api/scan/jobs
Tarama geçmişi
[
{
"id": 10,
"type": "full",
"status": "completed",
"total_ips": 42,
"listed_count": 3,
"started_at": "2026-03-27T08:00:00Z",
"completed_at": "2026-03-27T08:05:30Z"
}
]
/api/ips/{id}/scan
Tekli IP tara
{
"job_id": 11,
"status": "running",
"ip_address": "192.168.1.10"
}
/api/scan/jobs/{id}/listed
Tarama sonuçları
[
{
"ip_address": "192.168.1.10",
"rbl_host": "zen.spamhaus.org",
"listed": true,
"response": "127.0.0.2",
"checked_at": "2026-03-27T08:01:12Z"
}
]
Listelenme
/api/listings
Aktif listelenme listesi
[
{
"id": 5,
"ip_address": "192.168.1.10",
"rbl_host": "zen.spamhaus.org",
"rbl_name": "Spamhaus ZEN",
"first_seen": "2026-03-25T14:00:00Z",
"last_seen": "2026-03-27T08:01:12Z",
"status": "active"
}
]
/api/listings/export/csv
CSV export
Aktif listelenmeleri CSV formatında indirir.
/api/ips/{id}/active-listings
IP bazında aktif listelenme
[
{
"rbl_host": "zen.spamhaus.org",
"rbl_name": "Spamhaus ZEN",
"first_seen": "2026-03-25T14:00:00Z",
"last_seen": "2026-03-27T08:01:12Z"
}
]
/api/ips/{id}/history
IP tarama geçmişi
[
{
"scan_job_id": 10,
"status": "clean",
"listed_count": 0,
"checked_at": "2026-03-27T08:01:00Z"
}
]
RBL Sunucuları
/api/rbls
RBL listesi
[
{
"id": 1,
"name": "Spamhaus ZEN",
"host": "zen.spamhaus.org",
"is_active": true,
"category": "spam"
}
]
Gruplar
/api/groups
Grup listesi
[
{
"id": 1,
"name": "Mail Sunucuları",
"description": "Tüm mail sunucuları",
"ip_count": 12,
"created_at": "2026-03-20T10:00:00Z"
}
]
/api/groups
Grup oluştur
{
"name": "Web Sunucuları",
"description": "Frontend sunuculari",
"ip_ids": [1, 2, 5]
}
{
"id": 2,
"name": "Web Sunucuları",
"description": "Frontend sunuculari",
"ip_count": 3,
"created_at": "2026-03-27T10:00:00Z"
}
/api/groups/{id}
Grup güncelle
{
"name": "Web Sunucuları (Güncellendi)",
"description": "Tüm frontend sunucuları",
"ip_ids": [1, 2, 5, 8]
}
/api/groups/{id}
Grup sil
Başarılı silme işleminde 204 No Content döner. Gruba ait IP'ler silinmez.
/api/groups/{id}/scan
Grup taraması başlat
{
"job_id": 12,
"status": "running",
"group_name": "Mail Sunucuları",
"total_ips": 12
}
Bildirim Kontaklari
/api/contacts
Kontak listesi
[
{
"id": 1,
"name": "DevOps Ekibi",
"type": "email",
"value": "devops@example.com",
"is_active": true
}
]
/api/contacts
Kontak ekle
{
"name": "Sistem Yoneticisi",
"type": "email",
"value": "admin@example.com"
}
/api/contacts/{id}
Kontak güncelle
{
"name": "Sistem Yoneticisi",
"type": "email",
"value": "sysadmin@example.com",
"is_active": true
}
/api/contacts/{id}
Kontak sil
Başarılı silme işleminde 204 No Content döner.
Dashboard
/api/dashboard/stats
Dashboard istatistikleri
{
"total_ips": 42,
"clean_ips": 39,
"listed_ips": 3,
"active_listings": 5,
"last_scan_at": "2026-03-27T08:00:00Z",
"rbls_checked": 45
}
Profil
/api/profile
Profil bilgileri
{
"username": "john",
"display_name": "John Doe",
"email": "john@example.com",
"role": "admin",
"tenant": "Acme Corp",
"plan": "pro"
}
/api/profile
Profil güncelle
{
"display_name": "John Doe",
"email": "john@example.com"
}
/api/profile/password
Şifre değiştir
{
"current_password": "eski_şifre",
"new_password": "yeni_güçlü_şifre_123!"
}
Hata Kodları
| Kod | Anlamı | Açıklama |
|---|---|---|
| 400 | Bad Request | Geçersiz istek parametreleri |
| 401 | Unauthorized | Kimlik doğrulama gerekli |
| 403 | Forbidden | Yetkiniz yok (rol veya plan sınırı) |
| 404 | Not Found | Kaynak bulunamadı |
| 409 | Conflict | Kaynak zaten mevcut (örneğin aynı IP) |
| 429 | Too Many Requests | Rate limit aşıldı |
| 500 | Internal Server Error | Sunucu hatası |
{
"detail": "Hata aciklamasi burada yer alir."
}