Güvenlik Merkezi APIPublic Developer Dokümantasyonu
MEDPOV Remote Access API

Güvenlik Merkezi için public developer kullanım alanı.

Bu sayfa uzak sitelerin, backend servislerinin, local asistanların ve otomasyon araçlarının MEDPOV Güvenlik Merkezi API’sini nasıl çağıracağını gösterir. API; güvenlik olaylarını sorgulama, IP profili çıkarma, canlı trafik izleme, sistem sağlığı alma ve yetkili POST aksiyonları çalıştırma için tasarlanmıştır.

18Read / query action
7Authorized POST action
OffQuery string API key mode
JSONYanıt format
Aksiyon discovery is synchronized from docs/openapi.yaml (20 declared GET actions). Narrative examples below add usage guidance to that canonical contract.

Auth ve bağlantı standardı

API anahtarını Ayarlar sayfasındaki Remote API Access alanından oluştur. Anahtar sadece oluşturulduğu anda düz metin görünür; sonrasında hash olarak saklanır.

Önerilen header

Authorization + Tenant Scope
Authorization: Bearer mpsec_YOUR_API_KEY
X-MEDPOV-Site-ID: site_xxxxxxxxx
Accept: application/json

Alternatif olarak X-MEDPOV-API-Key: mpsec_YOUR_API_KEY veya X-API-Key kullanılabilir. Query-string API anahtarı kalıcı olarak devre dışıdır.

HTTP ve response kuralları

  • Tüm cevaplar application/json; charset=utf-8 döner.
  • GET aksiyonları bilgi okur; POST aksiyonları IP kuralı veya olay durumu değiştirir.
  • CORS deny-by-default çalışır: Origin içeren tarayıcı çağrıları yalnızca allowed_origins listesindeyse kabul edilir; native/server istemcileri Origin göndermeden çağırabilir.
  • Başarılı cevaplarda çoğunlukla tamam: true, hata durumlarında tamam: false döner.
Önemli: API key’i public JavaScript, HTML kaynak kodu, mobil uygulama içine çıplak şekilde koyma. Uzak sitede çağrı gerekiyorsa kendi backend’in üzerinden proxy/helper ile çağır.

Multi-Site Flow

  1. GET action=sites — authenticate globally; omit the site header.
  2. Select the returned site_... identity.
  3. Send X-MEDPOV-Site-ID on every site-scoped read, analyze and write request.
  4. Use GET action=all-sites-overview for the global fleet view; omit the site header.
Discover Sites
curl 'https://guard.medpov.com/admin/api/remote-access.php?action=sites' \
  -H 'Authorization: Bearer mpsec_YOUR_API_KEY'

curl 'https://guard.medpov.com/admin/api/remote-access.php?action=all-sites-overview' \
  -H 'Authorization: Bearer mpsec_YOUR_API_KEY'

Sorgulanabilir komutlar

Bu aksiyonlar uzak sistemden veya local asistandan çağrılabilir. Okuma aksiyonları GET ile çalışır.

İşlemMetotParametrelerNe döndürür?
ping / statusGETAPI anahtarını, bağlantıyı, sürümü ve sunucu zamanını doğrular.
capabilities / schemaGETDesteklenen aksiyon listesini ve temel auth bilgisini döndürür.
sites / protected-sitesGETGlobal Control Tam Orta anahtarıyla seçilebilir site kimliklerini döndürür; site header istemez.
all-sites-overviewGETFleet özetini döndürür; site header istemez.
overview / dashboardGETKontrol Paneli özeti, site bilgisi, 24 saat top IP listesi, son YÜKSEK/CRITICAL olaylar ve öneriler.
map / map-data / map-intelligenceGETmode, threat_range, live_range, include_curve_pointsKontrol Paneli haritası ile aynı target, threat_events, live_users, layers, traces, popups ve aktif mode bilgisini döndürür.
threat-map / live-map / both-mapGETthreat_range, live_range, include_curve_pointsHaritayı direkt Tehdit, Live veya Both modunda açmak için kısa alias komutlarıdır.
threats / latest-threatsGETlimitSon yüksek riskli tehdit akışını getirir.
eventsGETrisk, status, ip, q, since_hours, resolved, limit, offsetGüvenlik olaylarını filtreli ve sayfalı şekilde listeler.
eventGETidTek güvenlik olayını detayları, IP kural durumu ve hızlı analizle döndürür.
ip / ip-profile / ip_profileGETip, refresh, limitIP lookup, DNSBL, trafik, login baskısı, bot kayıtları, AI izleri ve öneri üretir.
analyze / analysisGETip veya event_idIP veya olay üzerinden sinyal özeti, kural durumu ve tavsiye üretir.
trafficGETip, q, since_hours, limitSon trafik kayıtlarını getirir.
live / live-sessionsGETlimitAktif heartbeat/canlı oturum listesini verir.
botsGETip, q, limitBot tespitlerini ve bot skorlarını listeler.
login / login-pressureGETip, q, limitYönetici/kullanıcı login baskısı ve başarısız giriş kayıtlarını döndürür.
healthGETRemote site için en son Agent security_health/diagnostics snapshotını döndürür; taze veri için önce Agent health job çalıştırılmalıdır.
settingsGETGizli anahtarları döndürmeden güvenli sistem/modül ayar özetini verir.

Harita erişimi ve Friday harita komutları

Harita endpoint, admin dashboard’daki Global Tehdit Haritası ile aynı mantıkta çalışır. Friday; saldırı lokasyonlarını, canlı kullanıcı noktalarını, hedefe giden iz çizgilerini ve tıklama popup alanlarını bu JSON üzerinden okuyabilir.

Harita mode seçenekleri

GET action=map&mode=threat&threat_range=24hSadece saldırı lokasyonları, threat markerları, saldırı iz çizgileri ve threat popup alanları.
GET action=map&mode=live&live_range=liveAktif heartbeat ziyaretçileri, live markerları, kullanıcı iz çizgileri ve live popup alanları.
GET action=map&mode=both&live_range=liveTehdit ve Live katmanları aynı harita cevabında beraber aktif gelir.
GET action=both-map&include_curve_points=1Kısa alias; Friday çizgi eğrilerini curve_points ile bire bir yeniden çizebilir.
GET action=map&mode=both&include_curve_points=0Daha hafif cevap; çizgi için from/to + style gelir, eğri noktaları gönderilmez.
Harita JSON ana alanları
{
  "ok": true,
  "access": "map-intelligence",
  "mode": "both",
  "target": { "lat": 41.0082, "lng": 28.9784, "label": "Protected Origin" },
  "threat_events": [],
  "live_users": [],
  "layers": {
    "threat": { "enabled": true, "points": [], "traces": [], "popups": [] },
    "live": { "enabled": true, "points": [], "traces": [], "popups": [] }
  },
  "map": {
    "provider": "leaflet",
    "tile_provider": "openstreetmap",
    "tile_url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
    "active_layers": ["threat", "live"],
    "popup_contract": {}
  }
}

Yetkili POST aksiyonları

Bu komutlar sistemde değişiklik yapar. Sadece güvenilir backend, local assistant veya otomasyon servisinden çağrılmalıdır.

İşlemMetotBody parametreleriNe yapar?
block-ipPOSTip, minutes, reasonBelirtilen IP için geçici veya süresiz block kuralı oluşturur.
allow-ipPOSTip, minutes, reasonBelirtilen IP için allow kuralı oluşturur.
ignore-ipPOSTip, minutes, reasonBelirtilen IP’yi takip/aksiyon baskısından hariç tutar.
expire-ip-rules / remove-ip-rulesPOSTip, rule_typeIP üzerindeki aktif block/allow/ignore kurallarını süre bitmiş yapar.
resolve-eventPOSTid, statusTek olayı çözüldü olarak işaretler.
resolve-ip-eventsPOSTip, statusBir IP’ye ait açık olayları toplu çözüldü yapar.
ai-recheckPOSTlimitYerel AI re-check batch çalıştırır.

Uzak siteden çağırma örnekleri

Endpoint sabit kalır; sadece action ve parametreler değişir. Aşağıdaki kodlarda mpsec_YOUR_API_KEY yerine Ayarlar üzerinden üretilen anahtar kullanılmalı.

cURL · Genel Bakış
curl -X GET 'https://guard.medpov.com/admin/api/remote-access.php?action=overview' \
  -H 'Authorization: Bearer mpsec_YOUR_API_KEY' \
  -H 'X-MEDPOV-Site-ID: site_xxxxxxxxx'
  -H 'Accept: application/json'
cURL · Harita / Both
curl -X GET 'https://guard.medpov.com/admin/api/remote-access.php?action=both-map&limit=500' \
+  -H 'Authorization: Bearer mpsec_YOUR_API_KEY' \
+  -H 'X-MEDPOV-Site-ID: site_xxxxxxxxx'
  -H 'Accept: application/json'
cURL · Engelle IP
curl -X POST 'https://guard.medpov.com/admin/api/remote-access.php?action=block-ip' \
  -H 'Authorization: Bearer mpsec_YOUR_API_KEY' \
  -H 'X-MEDPOV-Site-ID: site_xxxxxxxxx'
  -H 'Content-Type: application/json' \
  -d '{"ip":"203.0.113.45","minutes":1440,"reason":"Remote confirmed abusive traffic"}'
PHP helper · uzak site/backend
<?php
function medpov_security_api(string $endpoint, string $apiKey, string $siteId, string $action, array $params = [], string $method = 'GET'): array
{
    $method = strtoupper($method);
    $url = $endpoint . '?action=' . rawurlencode($action);

    $headers = [
        'Authorization: Bearer ' . $apiKey,
        'Accept: application/json',
    ];
    if ($siteId !== '') $headers[] = 'X-MEDPOV-Site-ID: ' . $siteId;

    $body = null;
    if ($method === 'GET' && $params) {
        $url .= '&' . http_build_query($params);
    } elseif ($params) {
        $headers[] = 'Content-Type: application/json';
        $body = json_encode($params, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
    }

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => $method,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_TIMEOUT => 20,
        CURLOPT_CONNECTTIMEOUT => 8,
    ]);

    if ($body !== null) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    }

    $raw = curl_exec($ch);
    $error = curl_error($ch);
    $status = (int)curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    curl_close($ch);

    if ($raw === false || $raw === '') {
        return ['ok' => false, 'status' => $status, 'message' => $error ?: 'Empty API response'];
    }

    $json = json_decode($raw, true);
    if (!is_array($json)) {
        return ['ok' => false, 'status' => $status, 'message' => 'Invalid JSON response', 'raw' => $raw];
    }

    $json['_http_status'] = $status;
    return $json;
}

$endpoint = 'https://example.com/security-center/admin/api/remote-access.php';
$apiKey = 'mpsec_YOUR_API_KEY';
$siteId = 'site_xxxxxxxxx'; // Discover with GET action=sites (without this header).

$overview = medpov_security_api($endpoint, $apiKey, $siteId, 'overview');
$ipProfile = medpov_security_api($endpoint, $apiKey, $siteId, 'ip-profile', ['ip' => '8.8.8.8', 'refresh' => 1]);
$block = medpov_security_api($endpoint, $apiKey, $siteId, 'block-ip', [
    'ip' => '203.0.113.45',
    'minutes' => 1440,
    'reason' => 'Remote confirmed abusive traffic',
], 'POST');
Node / server-side fetch
const endpoint = 'https://example.com/security-center/admin/api/remote-access.php';
const apiKey = process.env.MEDPOV_SECURITY_API_KEY;
const siteId = process.env.MEDPOV_SECURITY_SITE_ID;

async function securityApi(action, params = {}, method = 'GET') {
  const url = new URL(endpoint);
  url.searchParams.set('action', action);

  const options = {
    method,
    headers: {
      Authorization: `Bearer ${apiKey}`,
      Accept: 'application/json'
    }
  };
  if (siteId) options.headers['X-MEDPOV-Site-ID'] = siteId;

  if (method === 'GET') {
    Object.entries(params).forEach(([key, value]) => url.searchParams.set(key, String(value)));
  } else {
    options.headers['Content-Type'] = 'application/json';
    options.body = JSON.stringify(params);
  }

  const res = await fetch(url, options);
  const data = await res.json();
  if (!res.ok || data.ok === false) throw new Error(data.message || `API error ${res.status}`);
  return data;
}

const overview = await securityApi('overview');
const mapBoth = await securityApi('map', { mode: 'both', live_range: 'live', include_curve_points: 1 });
const critical = await securityApi('events', { risk: 'CRITICAL', resolved: 0, limit: 20 });

Örnek cevap formatı

Her aksiyon kendi detay alanlarını döndürür; ortak başarı/hata mantığı aşağıdaki gibidir.

Başarılı shape
{
  "ok": true,
  "scope": "protected_site",
  "version": "9.0.0",
  "site": {
    "id": "site_xxxxxxxxx",
    "name": "Example",
    "domain": "example.com"
  }
}
Harita shape
{
  "ok": true,
  "access": "map-intelligence",
  "mode": "both",
  "target": { "lat": 41.0082, "lng": 28.9784, "label": "Protected Origin" },
  "threat_events": [],
  "live_users": [],
  "layers": {
    "threat": { "enabled": true, "points": [], "traces": [], "popups": [] },
    "live": { "enabled": true, "points": [], "traces": [], "popups": [] }
  },
  "map": {
    "provider": "leaflet",
    "tile_provider": "openstreetmap",
    "tile_url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
    "active_layers": ["threat", "live"],
    "popup_contract": {}
  }
}
Error shape
{
  "ok": false,
  "message": "Unauthorized",
  "hint": "Send Authorization: Bearer <api-key> or X-MEDPOV-API-Key."
}

Local assistant / otomasyon komut eşlemesi

Friday veya benzeri local asistan, kullanıcı komutunu aşağıdaki API aksiyonlarına çevirebilir.

Security durumunu özetle.GET action=overview
Son kritik olayları getir.GET action=events&risk=CRITICAL&resolved=0&limit=20
Haritayı threat modunda aç.GET action=threat-map&threat_range=24h
Canlı haritayı aç.GET action=live-map&live_range=live
Haritada threat ve live ikisini beraber göster.GET action=both-map&live_range=live&include_curve_points=1
8.8.8.8 IP’sini detaylı analiz et.GET action=ip-profile&ip=8.8.8.8&refresh=1
123 numaralı olayı incele.GET action=event&id=123
Bu IP’yi 24 saat blokla.POST action=block-ip body: ip, minutes=1440, reason
Bu IP’ye ait açık olayları kapat.POST action=resolve-ip-events body: ip, status=remote_ip_resolved
Sistem sağlığını kontrol et.GET action=health

Güvenli kullanım

API key’i sadece server-side ortam değişkeninde sakla. Anahtar sızarsa Ayarlar üzerinden devre dışı bırakıp yenisini oluştur.

Rate ve timeout

Uzak helper tarafında 8-20 saniye timeout, kısa süreli cache ve kontrollü retry kullan. Sonsuz döngüyle health/overview çağırma.

Önerilen akış

Önce ping, sonra overview, riskli durumda olay veya ip-profile, en sonda gerekirse POST aksiyonları.

Kurulum notu: Public doküman URL’si https://guard.medpov.com/developer-api.php. API endpoint ise https://guard.medpov.com/admin/api/remote-access.php.
Kopyalandı