Operatör paneli; sitenin entegrasyon, finans, oyuncu ve destek çalışma alanıdır. Erişim, site kimliği ve personelin yetkileriyle sınırlıdır. Bu rehber panel oturumlarını anlatır; sunucu API anahtarları ayrı kimlik doğrulama kullanır.

## 1. Hesaplar ve site kurulumu
Sağlayıcı yöneticileri `/admin/`, site personeli `/operator/` kullanır. Oyuncular, sitenin backend'inde üretilen kısa ömürlü biletle `/play/SITE_SLUG/` adresine girer. Hesaplar, çerezler ve yetkiler birbirinden ayrıdır.

Sağlayıcı yöneticisi siteyi oluşturur; izinli origin, oyun, katılım limiti, komisyon payı ve cüzdan modunu belirler, ardından sunucu API anahtarı üretir. Anahtarlar read, launch, wallet ve webhooks kapsamlarını, kaynak IP kısıtını ve son kullanma tarihini destekler. Açık anahtar bir kez gösterilir; operatörün backend gizli değer deposuna ayrı kanaldan iletilir. `keys.read` yetkili personel anahtar bilgilerini görebilir; anahtar üretemez veya platform ayarlarını değiştiremez.

Personel hesabında e-posta, isim, parola, `tenantId` ve yetki listesi bulunur. Her hesap tek siteye aittir; personel e-postaları benzersizdir. Parola 12–128 karakterdir. İlk parolayı hesap yöneticisi belirler; personel girişten sonra değiştirebilir. Parola, yetki ve etkinlik değişiklikleri eski oturumları kapatır. Duraklatılmış sitenin yetkili finans ve destek görünümleri açık kalır.

## 2. Panel oturumu ve iki aşamalı doğrulama
Panel API kökü `OPERATOR_ORIGIN`/operator-api adresidir. Tarayıcı istekleri panel origin'ini kullanır; sunucu API anahtarını bu uçlara göndermeyin.

```http Oturum uçları
POST /operator-api/login
POST /operator-api/login/2fa
GET /operator-api/session
POST /operator-api/logout
POST /operator-api/password
```

Giriş email ve password alır. 2FA etkinse parola yanıtı `mfaRequired` ve challenge içerir; `POST /login/2fa` challenge ve code değerlerini doğrulamadan panel oturumu açılmaz. Tamamlanmış giriş/oturum yanıtında user, tenant, `csrfToken` ve `expiresAt` bulunur. user güncel permissions listesini içerir.

Çerez HttpOnly, SameSite=Strict ve `/operator-api` kapsamındadır; operatör origin'i HTTPS ise Secure olur. Oturum sekiz saattir. Değişiklik istekleri yapılandırılmış Origin, Content-Type: application/json ve oturumun `X-CSRF-Token` değerini ister. Çerezleri same-origin kimlik bilgileriyle gönderin. Giriş ve 2FA adımları oturum oluşmadan çalışır; oturum CSRF değeri kullanmaz.

`POST /password` `currentPassword` ve password alır, ardından tüm oturumları kapatır. `X-Panel-Language`: tr desteklenen Türkçe doğrulama mesajlarını seçer; hata kodları değişmez. TOTP kurulum ve kurtarma ayrıntıları ACCESS-SECURITY.txt içindedir. Her personel kendi doğrulayıcısını kurar.

## 3. Site verileri ve raporlar
Bu uçlar oturuma bağlı sitenin verilerini verir. Sorgu parametresi başka siteyi seçemez. İlgili görüntüleme yetkisi gerekir.

```http Okuma uçları
GET /operator-api/dashboard?range=all
GET /operator-api/finance?range=month
GET /operator-api/players
GET /operator-api/rooms?status=running
GET /operator-api/keys
GET /operator-api/catalog
GET /operator-api/integrations
GET /operator-api/payouts
GET /operator-api/statement/export?format=csv&range=all
```

- range: all, month (son 30 gün), week (son yedi gün), today. Gün sınırı Europe/Istanbul; zamanlar Unix milisaniyedir.
- status: all, waiting, running, completed, cancelled.
- Genel bakış: site raporu, son 12 oda ve açık destek sayısı. `finance.read`, `rooms.read` ve `tickets.read` gerekir.
- Oyuncular: en fazla 500 kendi site oyuncusu; `availableBalance`, `lockedBalance` ve çevrimiçi durum dahil.
- Odalar: sitenin katıldığı son 300 yerel/ortak oda. Diğer sitelerin özel kimliği, üye ID'si, IP adresi ve bakiyesi açılmaz; rakiplere oda bazında takma kimlik verilir.
- Anahtarlar: maskeli önek, kapsam, IP kısıtı, süre ve son kullanım. Katalog: platform ve sitenin etkin politikası. Bu listeler sınırlı görünümdür; sınırsız tarihçe arşivi değildir.

## 4. Finans alanları
Tüm para alanları tam sayı kuruştur: 20000 = 200,00 TL. `amountMinor` alanına ondalıklı lira göndermeyin.

- `summary.operatorShare`: sitenin savaş komisyonlarından birikmiş payı.
- `summary.providerRevenue`: o siteye atfedilen sağlayıcı payı.
- `summary.providerNetProfit` ve uyumluluk için korunan `summary.netProfit`: sağlayıcı sonucu; operatör kârı değildir.
- `summary.operatorNet`: `operatorShare` + siteye atanmış gelir − siteye atanmış gider.
- `entryVolume`, `totalWinnings`, `paidPrizes`, refunds, `transferCredits` ve `transferDebits` ayrı ölçülerdir; komisyon gelirine eklenmez.

Manuel düzeltmeler sağlayıcının girdiği muhasebe kayıtlarıdır. Ortak odalar mevcut komisyon dağılımını ve kaynak cüzdanları kullanır; panel ikinci harcanabilir bakiye oluşturmaz. Cüzdan seamless veya transfer olabilir; SEAMLESS-WALLET.txt ve API.txt rehberlerine bakın.

`settlement.earnedOperatorShare` tüm zamanların birikmiş payıdır. `reservedOperatorShare` bekleyen ve ödenen ödemeleri kapsar. `paidOperatorShare` ve `pendingOperatorShare` bu durumları; `availableOperatorShare` rapor döneminden bağımsız olarak kazanılan eksi ayrılan payı gösterir. Bekleyen ödeme payı ayırır; ödendi yapılması ikinci kez kesmez.

Ödeme kayıtları banka transferi yapmaz. CSV'de özet paylar, dönem düzeltmeleri ve dönemde oluşturulan ödemeler yer alır. Ödeme satırları mutabakat nakit akışıdır; ikinci işletme gideri değildir. İlk sütun satır türünü belirtir; bütün satırları kâr diye toplamayın. CSV değerleri tırnaklanır; baştaki elektronik tablo formül karakterleri etkisizleştirilir.

## 5. Destek talepleri
Görüntüleme `tickets.read`; oluşturma, yanıt ve durum değişikliği `tickets.manage` ister. Personel yalnız kendi sitesinin konuşmalarına erişir.

```http Destek uçları
GET /operator-api/tickets?status=all
POST /operator-api/tickets
GET /operator-api/tickets/TICKET_UUID
POST /operator-api/tickets/TICKET_UUID/replies
PATCH /operator-api/tickets/TICKET_UUID
```

```json Talep oluşturma gövdesi
{
  "subject": "Oturum açma sorunu",
  "category": "api",
  "priority": "normal",
  "message": "Sorunu ve gizli olmayan referans kimliklerini açıklayın."
}
```

Kategoriler: general, api, wallet, billing, game, other. Öncelikler: low, normal, high, urgent. Durumlar: open, pending, resolved, closed. Site yanıtı open, destek yanıtı pending yapar. Site personeli yeniden açabilir veya kapatabilir; sağlayıcı destek ekibi tüm durumları seçebilir. Kapalı talebi yanıtlamadan önce yeniden açın.

```json Yanıt gövdesi
{
  "message": "Ek bilgiler"
}
```

```json Talebi yeniden aç
{
  "status": "open"
}
```

```json Talebi kapat
{
  "status": "closed"
}
```

Konu 3–160, ilk mesaj 3–5000, yanıt 1–5000 karakterdir. Liste son 300 talebi; konuşma en fazla 500 mesajı tutar. Dosya eki desteklenmez. Liste yanıtında tickets; detay ve işlem yanıtında ticket ile messages bulunur.

Destek yanıtı platform personelinin e-postasını açıklamadan destek etiketiyle gösterilir. Konuşmalar yeniden başlatmada korunur. İşlemler denetim kaydı oluşturur; parola, oturum belirteci ve mesaj içeriği denetim olayına yazılmaz. Talebe gizli bilgi koymayın.

## 6. Ekip, inceleme ve sohbet
Yetkili site yöneticisi `GET/POST /operator-api/team` ve `PATCH /operator-api/team/USER_UUID` kullanır. Oluşturma name, email, password ve permissions; düzenleme name, password, active ve permissions alır. Yönetici kendisinde olmayan yetkiyi veremez, daha yetkili hesabı değiştiremez veya son etkin ekip yöneticisini kaldıramaz. `team.read`/`team.manage` bu alanı yönetir.

Oda incelemeleri `reviews.read`/`reviews.manage` kullanır. Operatör kendi odalarını inceleyebilir; siteler arası oda hatasını yalnız sağlayıcı personeli sonuçlandırabilir. İade kararı mevcut muhasebe ve kurtarma akışından geçer; ROOM-REVIEWS.txt rehberine bakın. Sohbet `chat.read`/`chat.manage` kullanır; CHAT-MODERATION.txt rehberindedir. Risk bildirimi `risk.read`/`risk.manage` kullanır; FRAUD-RISK.txt rehberindedir.

Sağlayıcı yöneticisi site hesaplarını `/control/api/operator-users`, desteği `/control/api/tickets` altında yönetir. Bunlar sağlayıcı panel oturumu ve `sites.read`/`sites.manage` yetkilerini ister; operatör çerezi veya sunucu API anahtarı kullanmaz. Site personeli oluşturmak platform yöneticisi oluşturmaz.

## 7. Entegrasyon test konsolu ve indirmeler
`POST /operator-api/integrations/test` operatör oturumu, Origin, CSRF ve `integrations.test` ister. İki istek biçimi vardır:

```json Katalog kontrolü
{"kind":"catalog"}
```

```json Oturum yapılandırması kontrolü
{
  "kind": "launch-contract",
  "origin": "https://site.example",
  "mode": "iframe",
  "route": "lobby"
}
```

Konsol aynı origin'e HTTP isteği gönderir. Katalog kontrolü sitenin etkin kataloğunu okur (ilk 20 kayıt ve toplam sayı). Launch-contract; site durumu, bakım, kesin origin, mod/açılış rotası ve süresi geçmemiş launch anahtarı yapılandırmasını kontrol eder. Anahtarı kullanmaz; bilet, oyuncu veya oda oluşturmaz, bakiye taşımaz ve bonus satın almaz.

HTTP 200 bu kontrollerin geçtiğini, 422 yapılandırma ihtiyacını gösterir. Girdi/oturum/doğrulama/hız hataları 400/401/403/429 kullanır. Panel yöntem, yol, istek/yanıt JSON'u, durum ve süreyi gösterir. Hesap başına dakikada 12 kontrol yapılabilir ve denetim kaydı tutulur. Harici sunucunun API kimlik/IP doğrulaması, gerçek iframe yerleştirme, cüzdan callback'i veya oyun/ses/görüntü oynatımı bu testte ölçülmez.

`GET /operator-api/integrations/collection.json` siteye özel Postman v2.1 koleksiyonu indirir; API anahtarı alanı boştur. Anahtarı yalnız özel gizli değer ortamına ekleyin. Okuma örnekleri read ister. Ayrı launch örneğini çalıştırmak launch kapsamı gerektirir ve kısa ömürlü bilet üretir; oyuncu oluşturabilir/güncelleyebilir. Bakiye aktarmaz veya ayrı cüzdan sandbox'ı kurmaz.

## 8. Site backend'ini bağlayın
`PROVIDER_ORIGIN`/provider/v1 adresini sunucu API anahtarıyla kullanın. `externalId` ve `siteUsername` doğrulanmış site üyesinden gelir. `tenantId` + `externalId` aynı kalıcı oyuncuya eşlenir. Her tarayıcı açılışı kendi kısa ömürlü launch yanıtını alır; API anahtarını açığa çıkarmayın.

README.txt doğrulanmış iframe/modül kurulum örneklerini; API.txt ve `/sdk/openapi.json` uçları ve alanları içerir. IDENTITY-WALLET.txt kalıcı kimliği; SEAMLESS-WALLET.txt ortak site bakiyesini anlatır. Transfer ve seamless farklı sözleşmelerdir.

Iframe yardımcısında `onIdentity({player})` ve `onWalletChange()` vardır; ikincisi yalnız değişiklik ipucudur. Yetkili bakiyeyi sitenin oturum doğrulayan backend'inden okuyun. Modül, `launchMethod`: POST ve sunucudan gelen `launchCsrfToken` kullanabilir. Eski profil seçmeli örnek bir üyelik doğrulama sistemi değildir.

## 9. Dil ve kurulum
Panel Türkçe/İngilizce tercihini ss-panel-locale içinde saklar. Dokümantasyon dili bağımsızdır: ?lang=tr veya ?lang=en; bölüm bağlantıları seçimi korur. Dil değişimi kullanıcıların destek metnini çevirmez; para, kimlik, yetki veya oyun durumunu değiştirmez.

Yayınlanan origin'lerde HTTPS kullanın; operatör, admin ve public origin ayarlarını ayrı tutun. Yerel HTTP yalnız loopback geliştirmede kullanılabilir. RESULT-AUTHORITY.txt mevcut public demo sonuç sınırını açıklar; panel kontrolleri gerçek oyun/yayın, üretim cüzdanı veya ağ kabul testlerinin yerine geçmez.

## Dönem savaşları — site raporu

Günlük, haftalık ve aylık katılımları Operatör / Dönem savaşları sayfasından izle. Yalnız kendi sitenin katılımcıları, özel üye kimlikleri, tutarları ve ödülleri görünür; genel sıra tüm sitelerden hesaplanır. Personel izinleri: `rooms.read`, `players.read`, `finance.read`. Sunucudan `GET /provider/v1/competitions?kind=daily&limit=50&offset=0` (`read` kapsamı) veya `client.competitions({kind: 'daily'})` kullan. Para birimi TRY, tutarlar kuruştur. Ödenen ve bekleyen ödül ayrıdır. Dönem rehberindeki sayfalama, olay bağlamı ve paket güncelleme adımlarını uygula: [PERIOD-WARS.txt](PERIOD-WARS.txt). Iframe bağlantısı korunur; modül için güncel istemci ZIP'i gerekir.
