Geliştirici portalı · v1.0
Anka Gaming oyunlarını sitenize bağlayın
Tek cüzdan (seamless wallet) entegrasyonu: oyuncunun parası sizde kalır, oyun her bahis, kazanç ve iade için cüzdanınızı imzalı bir istekle çağırır. Aşağıdaki beş adımla test kipinde ilk turu oynatın.
| Alan | Ne için |
|---|---|
https://api.ormicast.store | Operatör API'si: /api/* ve /api/yonetim/* (imzalı), sağlık /saglik. |
https://play.ormicast.store | Oyun: açılış adresleri /o/<jeton>, açık demo /demo/<oyun>, kart görselleri. |
https://partner.ormicast.store | İş ortağı paneli: anahtarlar, adresler, IP izni, raporlar, teslim günlüğü. |
https://docs.ormicast.store | Bu portal, OpenAPI ve Postman dosyaları. |
- Test anahtarını alın
İş ortağı panelinde Entegrasyon sayfasından operatör kodunuzu ve şifrenizi alın (şifre bir kez gösterilir). Yalnız sunucunuzda, ortam değişkeni olarak tutun.
ZFLOW_TABAN=https://api.ormicast.store ZFLOW_OPERATOR=ornek-site ZFLOW_SIFRE=… iş ortağı panelinden … - Bağlantıyı deneyin
Gövdesiz istekte imza
"<zaman>."üzerinden hesaplanır.tamam:truevetest kipigörmelisiniz.ZAMAN=$(( $(date +%s) * 1000 )) IMZA=$(printf '%s.' "$ZAMAN" | openssl dgst -sha256 -hmac "$ZFLOW_SIFRE" | sed 's/^.*= //') curl -sS "$ZFLOW_TABAN/api/dene" \ -H "X-Zflow-Operator: $ZFLOW_OPERATOR" \ -H "X-Zflow-Zaman: $ZAMAN" \ -H "X-Zflow-Imza: $IMZA" # {"tamam":true,"mesaj":"Anka · Örnek Site (ornek-site) · TRY · test kipi", …} - Cüzdan ucunu kurun
Tek HTTPS uç: oyun
bakiye,bahis,kazanc,iadeolaylarınıPOSTeder. İmzayı ham gövdeden doğrulayın,seriile tekil tutun, her zaman HTTP 200 dönün. Ayrıntı: Cüzdan geri çağrıları.{"olay":"bahis","operator":"ornek-site","oyuncu":"u12345","oyun":"hurkus","zaman":1793880000000,"paraBirimi":"TRY","tur":"48213","seri":"h:905112:b","tutar":5000} { "tamam": true, "bakiye": 245000 } { "tamam": false, "hata": "yetersiz", "bakiye": 3000, "mesaj": "Bakiye yetersiz" }Postman koleksiyonundaki Cüzdan geri çağrısı örnekleri klasörü bu istekleri imzalı olarak kendi sunucunuza gönderir.
- Oyunu açın
Sunucunuz
/api/acçağırır, dönenurl'yi iframe'ler.zflow()yardımcısı İstek imzalama bölümündedir.const { url } = await zflow('/api/ac', { oyuncu: 'u12345', paraBirimi: 'TRY', dil: 'tr', geriUrl: 'https://api.site.ornek/zflow/cuzdan', cerceveler: ['https://site.ornek'], }); // url → https://play.ormicast.store/o/<jeton> (12 saat, oyuncuya özel) // <iframe src="${url}" allow="autoplay; fullscreen"></iframe> - Bildirimleri ve kataloğu bağlayın
Bildirim adresinize gelen olaylara
{"tamam":true}dönün;oyun.durumbakim/kapaliise oyunu lobiden gizleyin. Kataloğu 5 dakikada birIf-None-Matchile çekin. Ayrıntı: Olay bildirimleri.let etag = ''; setInterval(async () => { const r = await imzaliGet('/api/katalog', etag ? { 'If-None-Match': etag } : {}); if (r.status === 304) return; // değişmedi etag = r.headers.get('etag') ?? ''; lobiyiGuncelle((await r.json()).oyunlar); // durum: acik | bakim | kapali }, 5 * 60_000);
Dene paneli. API başvurusundaki her ucun altında, isteği tarayıcıda imzalayıp gönderen bir Dene paneli vardır. Sunucu tarayıcıdan gelen istekleri yalnız test kipindeki operatörler için kabul eder; canlı şifre girmeyin.
Genel bakış
Anka Gaming, Hürkuş K-VI crash oyununu seamless wallet (tek cüzdan) modeliyle sunar. Oyuncunun parası her zaman operatörde kalır. Oyun her bahis, kazanç ve iade için operatörün cüzdanına imzalı bir HTTP çağrısı yapar; bakiyenin tek doğru kaynağı operatörün defteridir.
Tek cüzdan
Ön yükleme ya da transfer yok. Bahis anında cüzdanınızdan düşer, kazanç anında yatar.
Açılış adresi
Sunucunuz tek bir imzalı istekle oyuncuya özel, tahmin edilemez oyun adresini alır ve iframe'ler.
Anında eşitleme
Bakım, oyun durumu ve katalog değişiklikleri olay bildirimiyle size gelir.
Kanıtlanabilir adalet
Her turun çöküş noktası tohumlardan hesaplanır; herkes açık uçla doğrulayabilir.
İletişim yönleri
| Yön | Uçlar | Kimlik |
|---|---|---|
| Operatör → API | /api/ac · /api/demo · /api/katalog · /api/dene · /api/yonetim/* | imzalı |
| Oyun → Operatör | Geri çağrı adresiniz: bakiye · bahis · kazanc · iade | imzalı |
| Sağlayıcı → Operatör | Bildirim adresiniz: oyun.* · bakim.* · duyuru · anahtar.yenilendi · deneme | imzalı |
| Herkes → API | /api/dogrula (adalet doğrulaması) · /saglik | açık |
API tabanı: https://api.ormicast.store. Oyun adresleri ve görseller: https://play.ormicast.store. Tüm istek ve cevap gövdeleri UTF-8 JSON'dur.
Terimler
- Operatör
- Oyunu kendi sitesine bağlayan işletme. Bir operatör kodu (küçük harf, rakam ve tire; 2–40 karakter) ve gizli bir şifre ile tanınır.
- Oyuncu kodu
- Operatörün oyuncuya verdiği opak kimlik (1–64 karakter). Oyun kişisel veri istemez. Kod, diğer oyunculara maskeli görünür (ör.
u***45); ad, e-posta ya da telefon kullanmayın. - Seri
- Her para olayının tekil kimliği:
h:<bahisId>:b(bahis),…:k(kazanç),…:i(iade). Cüzdanınızda benzersiz anahtar olmalıdır. - olay_id
- Her olay bildiriminin tekil kimliği; yeniden denemede aynı kalır.
- Kuruş
- Tüm tutarlar para biriminin en küçük biriminde tam sayıdır (1 ₺ =
100). Çarpanlar iki ondalıklı sayıdır (2.37). - Tur
- Tek bir uçuş. Numarası cüzdan çağrılarında
turalanında dizgi olarak gelir; oyuncunun iki bahis kutusu aynı tura düşer. - Para birimi
- Operatör kaydında sabittir (ör.
TRY); her istekte aynısı gönderilir.
Hesap ve kurulum
- İş ortağı paneli hesabıAnka sizin için bir operatör kaydı ve ilk yönetici hesabını açar. İş ortağı paneline site kodu, kullanıcı adı, parola ve iki adımlı kodla girersiniz.
- Operatör kodu ve şifrePanelde Entegrasyon sayfasından alınır. Şifre yalnız bir kez gösterilir; sunucunuzda gizli tutun, tarayıcıya asla göndermeyin. Şifreyi aynı sayfadan yenilersiniz; eski şifre anında geçersiz olur ve size
anahtar.yenilendibildirimi gelir. - IP izni
/api/*uçlarını çağıracak sunucularınızın çıkış IP adreslerini panelde girin. Eşleşme tam adres üzerindendir (CIDR yok). Liste boşsa IP kısıtı uygulanmaz; izinli olmayan adrese403 ipdöner. Ters yönde: geri çağrılar ve bildirimler2.31.112.61adresinden gelir. - Geri çağrı ve bildirim adresleriCüzdan geri çağrı adresinizi (
geriUrl) ve olay bildirim adresinizi (bildirimUrl) panelde girin. Ayrıca her/api/acisteğindegeriUrlile oturuma özel adres verebilirsiniz (oturumdaki adres önce gelir). Bildirim adresi boşsa bildirimler geri çağrı adresine gider. - Çerçeve kökenleriOyunu iframe içinde gösterecek sitelerinizin kökenlerini (
https://site.ornek) her açılıştacerceveleralanında gönderin. - Test kipiEntegrasyon süresince kaydınız test kipindedir. Protokol birebir aynıdır ve geri çağrılar gerçek cüzdanınıza gelir; yalnız test kayıtları GGR ekstresine girmez.
/api/denemesajındatest kipiyazar. Bu portaldaki Dene panelleri yalnız test kipinde çalışır. - Deneme sırası
/api/dene→/api/katalog→/api/demo→/api/acile test oyuncusuyla gerçek tur: bahis, bırakma, kaybetme, iptal. Panelde "bildirimi dene" iledenemeolayını gönderin.
Canlıya geçiş kontrol listesi
- İmza iki yönde ham gövde üzerinden hesaplanıyor ve doğrulanıyor; sunucu saatleri NTP ile eşli.
/api/denetamam:truedönüyor, para birimi doğru.- Geri çağrı ucu her durumda HTTP 200 ve JSON dönüyor;
bakiyekuruş tam sayı. - Aynı
seriile iki kez gelen kazanç bakiyeyi yalnız bir kez artırıyor. iadeasilSeriile eşleşiyor; bahisten önce gelen iade sonrasında, geç gelen bahis para çekmiyor.- Bahis cevabınız 4 saniyenin çok altında (hedef: birkaç yüz milisaniye).
- Kazanç ve iadeyi yalnız gerçekten geçici bir sorunda
geciciile reddediyorsunuz. - Bildirim ucu
{"tamam":true}dönüyor, aynıolay_id'yi bir kez işliyor;oyun.durumbakımında oyun lobiden kalkıyor. - Katalog 5 dakikada bir
If-None-Matchile çekiliyor;/api/ac503 bakimcevabı oyuncuya düzgün gösteriliyor. cercevelerlistesi dolu; tüm site alanlarınız ekli.- IP listeniz panelde girili.
- Mutabakat listesini (
GET /api/yonetim/mutabakat) ve paneldeki çağrı günlüğünü düzenli izliyorsunuz. - RTP seçeneği, sınırlar ve risk grupları kendi politikanıza göre gözden geçirildi.
- Anka kaydınızdan test işaretini kaldırdı.
İş ortağı paneli
https://partner.ormicast.store sitenizin personeli içindir ve yalnız kendi sitenizin verisini gösterir. Giriş: site kodu + kullanıcı adı + parola + iki adımlı kod (zorunlu, TOTP). İlk yönetici hesabını Anka açar; parola bir kez gösterilir, diğer kullanıcıları yöneticiniz açar.
| Sayfa | Ne yapılır |
|---|---|
| Entegrasyon | API tabanı ve operatör kodu; şifre yenileme; geri çağrı adresi (geriUrl) ve bildirim adresi (bildirimUrl); IP izinleri; bağlantı denemesi; çağrı günlüğü (son cüzdan çağrıları ve olay bildirimleri, cevap süresi, hata). |
| Oyunlar | Sitedeki oyunları aç/kapat, RTP seçeneği, kart görsellerini indir, açılış ve demo linkleri. |
| Raporlar · Ekstre | GGR, RTP, turlar, bahis arama, oyuncu kartı; aylık ekstre (kesin / taslak, CSV). |
| Duyurular ve bakım | Açık ve planlı bakımlar, Anka duyuruları. |
| Görünüm | Oyun ekranındaki logo, renkler, sesler ve metinler. |
| Kullanıcılar · Hesabım | Roller: yonetici (her şey), finans (rapor, ekstre), teknik (entegrasyon, anahtar, günlük), izleyici. |
Oyun matematiğinde site yalnız izin verilenden seçer ya da sıkılaştırır: RTP sağlayıcının izin verdiği seçeneklerden biridir, sınırlar Anka'nın koyduğu üst sınırın altına çekilebilir (bkz. RTP ve sınırlar).
Kimlik doğrulama ve imza
İki yönde de aynı imza kullanılır: siz oyuna istek atarken imzalarsınız, oyun cüzdanınıza geri çağrı yaparken aynı şifreyle imzalar.
| Başlık | Değer |
|---|---|
X-Zflow-Operator | Operatör kodunuz |
X-Zflow-Zaman | İstek zamanı, Unix epoch milisaniye (ör. 1793880000000) |
X-Zflow-Imza | hex HMAC-SHA256(şifre, "<zaman>.<hamGövde>"), 64 karakter |
Ham gövdeyi imzalayın. İmza, kabloda giden gövdenin bayt bayt kendisi üzerinden hesaplanır. JSON'u imzaladıktan sonra yeniden serileştirmeyin; gelen gövdeyi çözüp yeniden JSON'a çevirerek doğrulamayın. Boşluk, alan sırası ya da Unicode kaçışı değişirse imza tutmaz.
- Gövdesiz istek (GET): hamGövde boş dizgidir; imzalanan metin
1793880000000.olur. - Zaman penceresi: ±60 saniye. Oyun önce imzayı, sonra pencereyi denetler.
- Karşılaştırma: hex büyük/küçük harf fark etmez; sabit süreli karşılaştırma kullanın (
timingSafeEqual,hash_equals). - Nonce yok: pencere içinde aynı istek tekrar gelebilir. Para olayları
seriile tekil olduğundan tekrar zararsızdır. - Gövde türü: gövde taşıyan isteklerde
Content-Type: application/jsonzorunludur (değilse415); gövde en çok 64 KB.
Test vektörü
Şifre ornek-sifre, zaman 1793880000000:
| hamGövde | X-Zflow-Imza |
|---|---|
| (boş, GET) | 4dd0445651a23261f01f7230b32056bfb4e733a3f91e190d781f71adf03131a4 |
{"olay":"bahis","operator":"ornek-site","oyuncu":"u12345","oyun":"hurkus","zaman":1793880000000,"paraBirimi":"TRY","tur":"48213","seri":"h:905112:b","tutar":5000} | c688fe0e734f5849eabf505ed7049c8fdc5cb1f9769ec497b15fc00716b4e2da |
İstek imzalama (operatör → oyun)
Node.js
import { createHmac } from 'node:crypto';
const TABAN = 'https://api.ormicast.store';
const OPERATOR = 'ornek-site';
const SIFRE = process.env.ZFLOW_SIFRE; // yalnız sunucuda
export async function zflow(yol, govde) {
// imzalanan ve gönderilen AYNI dizgi
const ham = govde === undefined ? '' : JSON.stringify(govde);
const zaman = String(Date.now());
const imza = createHmac('sha256', SIFRE).update(`${zaman}.${ham}`).digest('hex');
const basliklar = {
'X-Zflow-Operator': OPERATOR, 'X-Zflow-Zaman': zaman, 'X-Zflow-Imza': imza,
Accept: 'application/json',
};
if (ham) basliklar['Content-Type'] = 'application/json';
const r = await fetch(TABAN + yol, {
method: ham ? 'POST' : 'GET', headers: basliklar, body: ham || undefined,
signal: AbortSignal.timeout(10_000),
});
const j = await r.json();
if (!r.ok || j.tamam === false) throw new Error(`${j.hata}: ${j.mesaj ?? ''}`);
return j;
}
// oyunu aç
const { url } = await zflow('/api/ac', {
oyuncu: 'u12345', paraBirimi: 'TRY', dil: 'tr', mobil: false,
donusUrl: 'https://site.ornek/casino',
geriUrl: 'https://api.site.ornek/zflow/cuzdan',
cerceveler: ['https://site.ornek'], oyun: 'hurkus',
});
PHP
<?php
const ZFLOW_TABAN = 'https://api.ormicast.store';
const ZFLOW_OPERATOR = 'ornek-site';
define('ZFLOW_SIFRE', getenv('ZFLOW_SIFRE')); // yalnız sunucuda
function zflow(string $yol, ?array $govde = null): array {
// imzalanan ve gönderilen AYNI dizgi
$ham = $govde === null ? '' : json_encode($govde, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$zaman = sprintf('%.0f', floor(microtime(true) * 1000));
$imza = hash_hmac('sha256', $zaman . '.' . $ham, ZFLOW_SIFRE);
$basliklar = [
'X-Zflow-Operator: ' . ZFLOW_OPERATOR,
'X-Zflow-Zaman: ' . $zaman,
'X-Zflow-Imza: ' . $imza,
'Accept: application/json',
];
$ch = curl_init(ZFLOW_TABAN . $yol);
if ($ham !== '') {
$basliklar[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_POSTFIELDS, $ham);
}
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $basliklar, CURLOPT_TIMEOUT => 10]);
$cevap = curl_exec($ch);
$durum = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$j = json_decode((string) $cevap, true) ?: [];
if ($durum !== 200 || ($j['tamam'] ?? null) === false) {
throw new RuntimeException(($j['hata'] ?? "http_$durum") . ': ' . ($j['mesaj'] ?? ''));
}
return $j;
}
// oyunu aç
$acilis = zflow('/api/ac', [
'oyuncu' => 'u12345', 'paraBirimi' => 'TRY', 'dil' => 'tr', 'mobil' => false,
'donusUrl' => 'https://site.ornek/casino',
'geriUrl' => 'https://api.site.ornek/zflow/cuzdan',
'cerceveler' => ['https://site.ornek'], 'oyun' => 'hurkus',
]);
$url = $acilis['url'];
Geri çağrı doğrulama (oyun → operatör)
Gelen geri çağrıda ham gövdeyi çözümlemeden önce okuyun ve imzayı onun üzerinden doğrulayın. Ardından gövdedeki operator alanının kendi kodunuz olduğunu denetleyin.
Node.js
import { createHmac, timingSafeEqual } from 'node:crypto';
// ham: Buffer — çerçevenin JSON çözücüsünden ÖNCE alınan gövde baytları
export function imzaTutar(sifre, zaman, ham, imza) {
if (!/^\d{1,16}$/.test(zaman) || !/^[0-9a-f]{64}$/i.test(imza)) return false;
const beklenen = createHmac('sha256', sifre).update(`${zaman}.`).update(ham).digest('hex');
return timingSafeEqual(Buffer.from(beklenen), Buffer.from(imza.toLowerCase()));
}
export const zamanTaze = (zaman) => Math.abs(Date.now() - Number(zaman)) <= 60_000;
// Express: app.post('/zflow/cuzdan', express.raw({ type: 'application/json' }), ...)
// Fastify: addContentTypeParser('application/json', { parseAs: 'buffer' }, ...)
PHP
<?php
function zflow_imza_tutar(string $sifre, string $zaman, string $ham, string $imza): bool {
if (!preg_match('/^\d{1,16}$/', $zaman) || !preg_match('/^[0-9a-f]{64}$/i', $imza)) return false;
return hash_equals(hash_hmac('sha256', $zaman . '.' . $ham, $sifre), strtolower($imza));
}
function zflow_zaman_taze(string $zaman): bool {
return abs(microtime(true) * 1000 - (float) $zaman) <= 60000;
}
$ham = file_get_contents('php://input'); // HAM gövde
$zaman = $_SERVER['HTTP_X_ZFLOW_ZAMAN'] ?? '';
$imza = $_SERVER['HTTP_X_ZFLOW_IMZA'] ?? '';
Oyun açma
Oyuncu oyunu seçtiğinde sunucunuz /api/ac çağırır, dönen url adresini iframe'de açar. Ayrı bir oyuncu kayıt ucu yoktur: oyuncu ilk açılışta oluşturulur.
/api/acimzalı| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
oyuncu | string, 1–64 | evet | Oyuncu kodu. |
paraBirimi | string, 3–4 harf | evet | Kaydınızdaki para birimiyle aynı olmalı; değilse 400 para_birimi. |
dil | string, 2 harf | hayır | Arayüz dili (ISO 639-1). Varsayılan tr. |
mobil | boolean | hayır | Mobil açılış. Varsayılan false. |
donusUrl | URL, http(s), ≤ 500 | hayır | Menüdeki "Siteye dön" ve oturum bitti kartının götürdüğü adres. |
geriUrl | URL, http(s), ≤ 500 | hayır* | Bu oturumun cüzdan geri çağrı adresi. Verilmezse kaydınızdaki adres kullanılır. *İkisi de yoksa bahis alınamaz. |
risk | yeni | normal | vip | supheli | hayır | Verilirse oyuncunun risk grubu her açılışta bu değere güncellenir. Verilmezse mevcut grup korunur (yeni oyuncu: normal). Grupları yönetim ucundan atıyorsanız bu alanı göndermeyin. |
cerceveler | string[], ≤ 10 | hayır | Oyunu iframe'leyebilecek kökenler: https://alan ya da https://alan:kapı; yol ve joker (*) yok. Boş bırakılırsa oyun sitenize gömülemez. |
oyun | "hurkus" | hayır | Katalogdaki disKod. Varsayılan hurkus. |
{
"oyuncu": "u12345",
"paraBirimi": "TRY",
"dil": "tr",
"mobil": false,
"donusUrl": "https://site.ornek/casino",
"geriUrl": "https://api.site.ornek/zflow/cuzdan",
"cerceveler": ["https://site.ornek", "https://m.site.ornek"],
"oyun": "hurkus"
}
| Cevap alanı | Tür | Açıklama |
|---|---|---|
tamam | boolean | true |
url | string | Oyuncuya özel açılış adresi https://play.ormicast.store/o/<jeton> (43 karakter jeton). |
oturum | number | Oturum numarası (destek ve kayıt için). |
bitis | string, ISO 8601 | Jetonun geçerlilik sonu: açılıştan 12 saat sonra. |
{
"tamam": true,
"url": "https://play.ormicast.store/o/kX9vR2mQ7tL4pZ8wN1cY6hB3jF5sD0aE_uG-oIqWxVe",
"oturum": 18342,
"bitis": "2026-11-06T00:00:00.000Z"
}
- Her açılışta
/api/acçağırın; adresi saklamayın, paylaşmayın. Jeton oyuncuya özeldir. - Oyuncuya özel link: jeton 12 saat geçerlidir, tahmin edilemez ve sunucuda yalnız özeti tutulur. Linki oyuncuya paylaştırmayın; oyuncu başka cihazdan oynayacaksa o cihaz için yeniden
/api/acçağırın. Aynı oyuncu ikinci bir sekmede açarsa ilk sekme "Burada devam et" kartını görür. - Oyuncu başına tek etkin pencere vardır. Aynı oyuncu oyunu ikinci pencerede açarsa ilk pencerede "Oyun başka bir sekmede açıldı" kartı çıkar.
- Eski biçim
/oyna?j=<jeton>çalışmaya devam eder; yeni entegrasyonlarda dönenurl'yi olduğu gibi kullanın. - Olası hatalar:
400 gecersiz(mesaj alanı adını söyler),400 para_birimi,401 imza,403 kapali,403 ip,503 bakim.
Bakımda açılış
Oyun bakımdayken /api/ac yeni oturum açmaz ve HTTP 503 döner. Oyunu lobide gizleyin, oyuncuya mesaj ve bitis gösterin; oyun.durum acik bildirimi gelince ya da katalogda durum:"acik" görünce yeniden gösterin.
{
"tamam": false,
"hata": "bakim",
"mesaj": "Kısa süreli bakım",
"bitis": "2026-11-06T03:00:00.000Z"
}
/api/demoimzalıoyuncusuz, para olayı yokSanal 1.000 ₺ bakiyeli demo oturum açar. Aynı turlar ve aynı çöküşler oynanır, ama cüzdan çağrısı yapılmaz, demo bahisleri listelerde görünmez ve raporlara girmez. Bu uç da imzalıdır: sitenizin sunucusu çağırır.
API'siz demo linki. Lobi kartında "Demo" düğmesi için API çağırmanız gerekmez: https://play.ormicast.store/demo/hurkus?dil=tr herkese açıktır (sanal 1.000 ₺, IP başına dakikada 10 açılış). Kendi donusUrl ve cerceveler değerlerinizle demo istiyorsanız /api/demo kullanın.
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
dil | string, 2 harf | hayır | Varsayılan tr. |
mobil | boolean | hayır | Varsayılan false. |
donusUrl | URL | hayır | "Siteye dön" adresi. |
cerceveler | string[], ≤ 10 | hayır | Aynı kural (/api/ac). |
oyun | "hurkus" | hayır | Varsayılan hurkus. |
{
"tamam": true,
"url": "https://play.ormicast.store/o/Dm3oT8eS1vK6nP0qR4wY7zA2bC5fH9jL_xU-gIiOtMr",
"oturum": 18343,
"bitis": "2026-11-06T00:00:00.000Z",
"bakiye": 100000
}
iframe, mobil ve dönüş adresi
<iframe
src="https://play.ormicast.store/o/…"
title="Hürkuş K-VI"
allow="autoplay; fullscreen"
style="width:100%;height:100%;border:0"></iframe>
- frame-ancestors: oyun sayfası
Content-Security-Policy: frame-ancestorsbaşlığını oturumuncercevelerlistesinden kurar. Listede olmayan bir site oyunu çerçeveleyemez. Liste boşsa yalnız oyunun kendi alanı ('self') kabul edilir ve oyun sitenize gömülemez: lobi ve iframe kökenlerinizi her açılıştacerceveleralanında gönderin. Her alt alan adını (m.,www.) ayrı yazın. - Mobil: düzen ekran genişliğine kendiliğinden uyar (720 px ve altı telefon düzeni). Telefonda iframe'i tam ekran bir kapta açın ya da
urladresine doğrudan yönlendirin. Üst pencerede açılışta çerçeve kuralı devreye girmez. - Ses: tarayıcı kuralı gereği sesler oyuncunun ilk dokunuşunda açılır.
- Dönüş adresi:
donusUrlmenüdeki "Siteye dön" ve "Oturum süresi doldu" kartında kullanılır. Süresi dolan ya da geçersiz jetonla açılan sayfa bu kartı gösterir; oyuncu sitenize dönüp oyunu yeniden açar.
Katalog, Dene, Doğrula
/api/katalogimzalıOyun listesi: lobi kartı için gereken her şey tek cevapta. RTP ve bahis sınırları sizin ayarınızdan hesaplanır; ayarı değiştirdiğinizde katalog da değişir. Katalog doğruluk kaynağıdır: her oyunda durum, surum ve guncelleme vardır.
{
"tamam": true,
"oyunlar": [{
"disKod": "hurkus",
"ad": "Hürkuş K-VI",
"studyo": "Anka Gaming",
"studyoLogo": "https://play.ormicast.store/anka/logo.png",
"studyoIsaret": "https://play.ormicast.store/anka/isaret.png",
"tur": "crash",
"kategori": "Crash",
"aciklama": "Uçak havalanır, çarpan yükselir; uçak gitmeden önce parayı çek. İki bahis, otomatik bahis ve otomatik bırakma, kanıtlanabilir adalet.",
"gorsel": "https://play.ormicast.store/oyun-gorsel/hurkus-kare-3f9a1c0b7d2e.webp",
"gorselDikey": "https://play.ormicast.store/oyun-gorsel/hurkus-dikey-8b41e07a9c13.webp",
"gorselYatay": "https://play.ormicast.store/oyun-gorsel/hurkus-yatay-c27d5e90f4a8.webp",
"gorselHareketli": null,
"rtp": 97,
"oynaklik": "yuksek",
"enAzBahis": 100,
"enCokBahis": 100000,
"enCokCarpan": 500,
"paraBirimleri": ["TRY"],
"diller": ["tr", "en"],
"demo": true,
"mobil": true,
"masaustu": true,
"cikis": "2026-11-05",
"etiketler": ["yeni"],
"ozellikler": ["iki_bahis", "otomatik_bahis", "otomatik_birakma", "kanitlanabilir_adalet", "canli_bahisler"],
"durum": "acik",
"surum": 3,
"guncelleme": "2026-11-05T09:00:00.000Z"
}]
}
| Alan | Tür | Açıklama |
|---|---|---|
disKod | string | Oyun kodu; /api/ac ve /api/demo isteklerindeki oyun alanı. |
ad | string | Gösterim adı. |
studyo · studyoLogo · studyoIsaret | string · URL · URL | Stüdyo adı, tam logo ve kare işaret (küçük rozetler için). |
tur · kategori | string | Oyun türü (crash) ve lobi kategorisi (Crash). |
aciklama | string | Kısa tanıtım metni. |
gorsel | URL | null | Kare kart görseli (1:1). |
gorselDikey | URL | null | Dikey kart görseli (3:4). |
gorselYatay | URL | null | Yatay afiş (16:9). |
gorselHareketli | URL | null | Hareketli önizleme (animasyonlu WebP ya da GIF); yoksa null. |
rtp | number (%) | Bu operatör için oyuncuya dönüş oranı: 100 − kasaPayi (ör. 97). |
oynaklik | string | Oynaklık (yuksek). |
enAzBahis · enCokBahis | integer, kuruş | normal risk grubunun bahis sınırları. |
enCokCarpan | number | Genel çarpan tavanı ile normal grubun tavanından küçük olanı. |
paraBirimleri | string[] | Kaydınızdaki para birimi. |
diller | string[] | Arayüz dilleri (ISO 639-1). |
demo · mobil · masaustu | boolean | Demo açılabilir mi; telefonda ve masaüstünde oynanır mı. |
cikis | string, YYYY-MM-DD | Çıkış tarihi. |
etiketler | string[] | Lobi etiketleri (ör. yeni). |
ozellikler | string[] | iki_bahis, otomatik_bahis, otomatik_birakma, kanitlanabilir_adalet, canli_bahisler. |
durum | acik | bakim | kapali | bakim ya da kapali iken oyunu lobide gizleyin; /api/ac bu durumda 503 bakim döner. |
surum | integer | Oyun kaydı her değiştiğinde artar; elinizdekinden küçük sürümü yok sayın. |
guncelleme | string, ISO 8601 | Son değişiklik zamanı. |
Önbellek ve eşitleme
- Cevap
ETagbaşlığı taşır. Sonraki isteklerdeIf-None-Match: <etag>gönderin; değişiklik yoksa gövdesiz304döner. - Önerilen düzen: olay bildirimlerini dinleyin ve kataloğu 5 dakikada bir çekin. Bir bildirim kaçsa da lobiniz en geç 5 dakikada düzelir.
Görseller. Tüm adresler mutlaktır (https://play.ormicast.store/oyun-gorsel/…). Görsel dosyaları uzun süreli önbelleğe uygundur (immutable) ve her kökenden okunabilir (Access-Control-Allow-Origin: *). Yüklenen bir görselin adı içeriğinden türetilir: görsel değişirse adresi de değişir. Görselleri kendi CDN'inize kopyalayabilirsiniz; oyun.guncellendi geldiğinde değişen adresleri güncelleyin.
/api/deneimzalıel sıkışmaKodunuz, şifreniz, IP izniniz ve saatiniz doğru mu? Para oynatmaz; entegrasyon testinde ve izlemede kullanın.
{
"tamam": true,
"mesaj": "Anka · Örnek Site (ornek-site) · TRY · test kipi",
"surum": "1.0.0+a1b2c3d",
"oyunlar": ["hurkus"],
"paraBirimi": "TRY",
"test": true
}
paraBirimi kaydınızdaki para birimidir; kendi yapılandırmanızla karşılaştırın. test, kaydınızın test kipinde olup olmadığını gösterir.
/api/dogrulaaçık · imzasızAdalet doğrulaması. İki biçimi vardır (ayrıntı: Oyun kuralları ve adalet).
Biten turun kaydı: ?tur=<no>&operator=<kod>
GET https://api.ormicast.store/api/dogrula?tur=48213&operator=ornek-site
{
"tamam": true, "tur": 48213, "bitti": true,
"tohumOzet": "c001faea70fc74477a2c7d8073a4d3a2444414c7cb6fdd32dfbae21abeb9b256",
"tohum": "7c2e0b5a9d41f3e8a6b1c0d9e2f3a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5",
"istemciTohum": "8b6ea82bb9129a7aa2797d4c3e1ae26dbea87dacf11425819cec8c3e271be04f",
"kasaPayi": 3, "tavan": 500,
"cokus": 16.65, "kayitliCokus": 16.65
}
Tur sürüyorsa tohum açıklanmaz: {"tamam":true, "tur":48213, "bitti":false, "tohumOzet":"…"}. cokus tohumlardan yeniden hesaplanan, kayitliCokus turda kaydedilen değerdir; ikisi her zaman aynı olmalıdır.
Saf hesap: ?sunucuTohumu&istemciTohumu&kasaPayi[&tavan]
| Parametre | Kural |
|---|---|
sunucuTohumu, istemciTohumu | 8–128 karakter |
kasaPayi | 0–15 (%) |
tavan | 1–10000, varsayılan 10000 |
{ "tamam": true, "cokus": 16.65, "kasaPayi": 3, "tavan": 500 }
Cüzdan geri çağrıları
Operatör tek bir HTTPS uç uygular: geri çağrı adresi. Oyun bu adrese POST ile JSON gönderir, imza başlıkları aynıdır (sizin şifreniz). Olay türü gövdedeki olay alanındadır: bakiye · bahis · kazanc · iade.
Kaynak IP. Geri çağrılar oyun sunucusundan gelir; şu anki değer 2.31.112.61. Güvenliğin esası imzadır; IP süzgeci ek bir katmandır.
Akış
POST /api/ac → {url}; siteniz url'yi iframe'ler.
bakiye: oyuncu bağlanınca güncel bakiye sorulur.
bahis · seri h:905112:b · tutar 5000. Tutarı düşün, yeni bakiyeyi dönün.
Tek atış, 4 sn. Cevap gelmezse bahis alınmaz ve iade kuyruğa yazılır.
Oyuncu bahis fazında iptal ederse: iade · seri h:905112:i · asilSeri h:905112:b.
Oyuncu bırakırsa (elle ya da oto): kazanc · seri h:905112:k · tutar 11850.
Bırakmayla aynı işlemde kuyruğa yazılır; ulaşana dek yeniden denenir.
Uçak çöker. Bırakmayan bahis kaybetmiştir; kayıp için çağrı gelmez.
İstek alanları
| Alan | Tür | Hangi olayda | Açıklama |
|---|---|---|---|
olay | string | hepsi | bakiye | bahis | kazanc | iade |
operator | string | hepsi | Operatör kodunuz; kendi kodunuzla karşılaştırın. |
oyuncu | string | hepsi | /api/ac'de verdiğiniz oyuncu kodu. |
oyun | string | hepsi | hurkus |
tur | string | bahis, kazanc, iade | Tur numarası. |
seri | string | bahis, kazanc, iade | Tekil işlem kimliği h:<bahisId>:b|k|i. |
zaman | number, ms | hepsi | X-Zflow-Zaman ile aynı; her yeniden denemede tazelenir. |
paraBirimi | string | hepsi | Kaydınızdaki para birimi. |
tutar | integer, kuruş, > 0 | bahis, kazanc, iade | İşlem tutarı. |
asilSeri | string | iade | İade edilen bahsin serisi (h:<bahisId>:b). |
Olaylar
bakiye · para oynatmaz
Oyuncu bağlandığında ve bir bahis reddinden sonra sorulur. tur, seri, tutar gelmez. Güncel bakiyeyi dönün.
{"olay":"bakiye","operator":"ornek-site","oyuncu":"u12345","oyun":"hurkus","zaman":1793880000000,"paraBirimi":"TRY"}
bahis · tutarı düşün
Bakiye yetiyorsa tutarı düşün ve yeni bakiyeyi dönün. Yetmiyorsa hiçbir şey düşmeden yetersiz dönün; eksi bakiyeye izin vermeyin.
{"olay":"bahis","operator":"ornek-site","oyuncu":"u12345","oyun":"hurkus","zaman":1793880000000,"paraBirimi":"TRY","tur":"48213","seri":"h:905112:b","tutar":5000}
{ "tamam": true, "bakiye": 245000 }
{ "tamam": false, "hata": "yetersiz", "bakiye": 3000, "mesaj": "Bakiye yetersiz" }
kazanc · tutarı yatırın
Oyuncu bıraktığında gelir. Tutar floor(bahis × çarpan) değeridir; risk grubunun en çok kazanç ve günlük tavan sınırlarıyla kesilmiş olabilir. İlgili bahis (h:<bahisId>:b) daima daha önce başarıyla işlenmiştir.
{"olay":"kazanc","operator":"ornek-site","oyuncu":"u12345","oyun":"hurkus","tur":"48213","seri":"h:905112:k","zaman":1793880007000,"paraBirimi":"TRY","tutar":11850}
iade · bahsi geri verin
Bahsin tamamını geri verir. Şu durumlarda gelir: oyuncu bahis fazında iptal etti; bahis çağrınız 4 sn içinde cevaplanmadı; bahis kabul edilirken tur uçuşa geçti; arıza sonrası tur iptal edildi.
{"olay":"iade","operator":"ornek-site","oyuncu":"u12345","oyun":"hurkus","tur":"48213","seri":"h:905112:i","zaman":1793880002000,"paraBirimi":"TRY","tutar":5000,"asilSeri":"h:905112:b"}
asilSeriişlenmiş bir bahisse tutarı geri yatırın.asilSerihiç gelmemişse ya da reddettiyseniz para oynatmayın, ama yer tutucu kayıt yazın vetamam:truedönün. Aynı seriyle sonradan gelen bahis tekrar sayılır ve para çekmez. (Cevapsız kalan bahis isteği size geç ulaşabilir.)
Tekillik (seri)
Aynı seri ikinci kez gelirse para yeniden oynatılmaz. İlk işlemin sonucunu (tamam ya da aynı hata) güncel bakiyeyle tekrar dönün.
sericüzdanınızda benzersiz anahtar olmalıdır. Bakiye hareketini ve seri kaydını tek veritabanı işleminde yazın.- Kazanç ve iade, cevabınız ulaşana kadar yeniden gönderilir; aynı seri birçok kez gelebilir.
- Gövdedeki
zamanher denemede tazelenir, yani gövde baytları denemeden denemeye değişir. Tekilliği gövde özetiyle değil,seriile kurun. - Olaylar sırasız gelebilir: bir iade, ilgili bahis isteğinden önce ulaşabilir (bkz. yer tutucu).
Cevap biçimi
Cevap her zaman HTTP 200 ve JSON'dur.
{ "tamam": true, "bakiye": 245000 }
{ "tamam": false, "hata": "oyuncu", "bakiye": 245000, "mesaj": "Hesabınız geçici olarak kısıtlı" }
bakiye: işlemden sonraki bakiye, kuruş, sayı. Başarıda zorunlu; retlerde isteğe bağlı.mesaj: en çok 200 karakter. Bahis retlerinde oyuncuya gösterilebilir; kısa ve oyuncuya uygun Türkçe yazın.- Oyun şunları geçici sayar: 200 dışı HTTP durumu, JSON olmayan gövde,
tamamalanı olmayan gövde,tamam:trueolup sayısalbakiyeiçermeyen gövde, ağ hatası, zaman aşımı. - Tanınmayan
hatakoduredsayılır.
Hata kodları ve oyunun davranışı
| hata | Ne zaman | Bahiste | Kazanç / iadede |
|---|---|---|---|
yetersiz | Bakiye yetmiyor | Bahis alınmaz; oyuncu "Bakiye yetersiz" görür. | Kesin ret: yeniden denenmez, mutabakat listesine düşer. |
oyuncu | Oyuncu yok, kapalı ya da kısıtlı | Bahis alınmaz; mesajınız gösterilir (yoksa "Bahis kabul edilmedi"). | Kesin ret → mutabakat. |
imza | İmza ya da operatör doğrulanamadı | Bahis alınmaz (mesajınız). | Yeniden denenir (gecici gibi; saat farkı ya da şifre yenileme anı için). |
gecici | Geçici arıza (veritabanı, bakım) | Bahis alınmaz; "Geçici bir sorun oldu, yeniden deneyin". İade gönderilmez: para düşmemiş olmalı. | Yeniden denenir (takvim aşağıda). |
para_birimi | Para birimi tutmuyor | Bahis alınmaz (mesajınız). | Kesin ret → mutabakat. |
red | Diğer retler (sorumlu oyun sınırı, kural) | Bahis alınmaz; mesajınız oyuncuya gösterilir. | Kesin ret → mutabakat. |
Kazanç ve iadeyi reddetmeyin. Oyuncu bu parayı kazanmıştır ya da parası iade edilmektedir. Geçici bir sorununuz varsa gecici dönün; oyun yeniden dener. imza cevabı da yeniden denenir (her denemede zaman tazelenir). gecici ve imza dışındaki her kod kesin rettir ve elle mutabakat gerektirir.
Zaman aşımı ve yeniden deneme
| Olay | Bekleme | Deneme |
|---|---|---|
bakiye | 4 sn | Tek deneme; ulaşılamazsa geçici sayılır. |
bahis | 4 sn | Tek atış. Cevapsız kalırsa bahis başarısız sayılır, oyuncuya "Geçici bir sorun" gösterilir ve iade kuyruğa yazılır (bahsi işlemişseniz iade geri alır). |
kazanc, iade | deneme başına 8 sn | Giden kutusu (outbox): hemen gönderilir, olmazsa 2, 5, 15, 60, 300 sn sonra, ardından her 300 sn. 24 saat sonra vazgecildi olur ve mutabakat listesine düşer. |
Kazanç, bırakmayla aynı veritabanı işleminde giden kutusuna yazılır. Oyun tarafında bir kazanç ya da iade kaybolmaz; tek risk sizin uzun süre ulaşılamaz olmanızdır. Başarılı her kazanç ve iade cevabındaki bakiye oyuncunun ekranına anında yansır.
Örnek uygulama
Aşağıdaki örnekler kuralları göstermek içindir; gerçek uygulamada bakiye ve seri kaydı aynı veritabanı işleminde, seri benzersiz anahtarla tutulur.
Node.js
import { createServer } from 'node:http';
import { createHmac, timingSafeEqual } from 'node:crypto';
const OPERATOR = 'ornek-site', PARA = 'TRY';
const SIFRE = process.env.ZFLOW_SIFRE;
// bellek içi örnek defter (kuruş). Gerçekte: veritabanı, tek işlem, seri UNIQUE.
const bakiyeler = new Map([['u12345', 250_000]]);
const islemler = new Map(); // seri → ilk cevap
const iadeEdilen = new Set(); // iadesi gelmiş bahis serileri (yer tutucu)
function imzaTutar(zaman, ham, imza) {
if (!/^\d{1,16}$/.test(zaman) || !/^[0-9a-f]{64}$/i.test(imza)) return false;
const beklenen = createHmac('sha256', SIFRE).update(`${zaman}.`).update(ham).digest('hex');
return timingSafeEqual(Buffer.from(beklenen), Buffer.from(imza.toLowerCase()));
}
function isle(o) {
if (o.operator !== OPERATOR) return { tamam: false, hata: 'imza', mesaj: 'Operatör tutmuyor' };
if (o.paraBirimi !== PARA) return { tamam: false, hata: 'para_birimi', mesaj: 'Para birimi tutmuyor' };
if (!bakiyeler.has(o.oyuncu)) return { tamam: false, hata: 'oyuncu', mesaj: 'Oyuncu bulunamadı' };
const bakiye = () => bakiyeler.get(o.oyuncu);
const ekle = (fark) => bakiyeler.set(o.oyuncu, bakiye() + fark);
if (o.olay === 'bakiye') return { tamam: true, bakiye: bakiye() };
// tekillik: aynı seri → para oynamaz, ilk sonuç + güncel bakiye
const onceki = islemler.get(o.seri);
if (onceki) return { ...onceki, bakiye: bakiye() };
let cevap;
if (o.olay === 'bahis') {
if (iadeEdilen.has(o.seri)) cevap = { tamam: true }; // iadesi önce geldi: çekme
else if (bakiye() < o.tutar) cevap = { tamam: false, hata: 'yetersiz', mesaj: 'Bakiye yetersiz' };
else { ekle(-o.tutar); cevap = { tamam: true }; }
} else if (o.olay === 'kazanc') {
ekle(o.tutar); cevap = { tamam: true };
} else if (o.olay === 'iade') {
if (islemler.get(o.asilSeri)?.tamam && !iadeEdilen.has(o.asilSeri)) ekle(o.tutar);
iadeEdilen.add(o.asilSeri); // yer tutucu
cevap = { tamam: true };
} else cevap = { tamam: false, hata: 'red', mesaj: 'Olay tanınmıyor' };
islemler.set(o.seri, cevap);
return { ...cevap, bakiye: bakiye() };
}
createServer((req, res) => {
const parcalar = [];
req.on('data', (p) => parcalar.push(p));
req.on('end', () => {
const ham = Buffer.concat(parcalar); // HAM gövde: imza bunun üzerinden
const zaman = String(req.headers['x-zflow-zaman'] ?? '');
const imza = String(req.headers['x-zflow-imza'] ?? '');
let cevap;
if (!imzaTutar(zaman, ham, imza)) cevap = { tamam: false, hata: 'imza', mesaj: 'İmza doğrulanamadı' };
else if (Math.abs(Date.now() - Number(zaman)) > 60_000) cevap = { tamam: false, hata: 'gecici', mesaj: 'Saat farkı' };
else try { cevap = isle(JSON.parse(ham.toString('utf8'))); }
catch { cevap = { tamam: false, hata: 'gecici', mesaj: 'İşlenemedi' }; }
res.writeHead(200, { 'Content-Type': 'application/json' }); // HER ZAMAN 200
res.end(JSON.stringify(cevap));
});
}).listen(8080);
PHP
<?php
// Tablo (örnek):
// CREATE TABLE zflow_islem (
// seri VARCHAR(40) PRIMARY KEY, -- h:<bahisId>:b|k|i (tekil)
// olay VARCHAR(8) NOT NULL, oyuncu VARCHAR(64) NOT NULL, tutar BIGINT NOT NULL,
// asil_seri VARCHAR(40) NULL, tamam BOOLEAN NOT NULL, hata VARCHAR(16) NULL,
// olusturma TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP);
require 'zflow-dogrula.php'; // ZFLOW_SIFRE, ZFLOW_OPERATOR, zflow_imza_tutar, zflow_zaman_taze (İmza bölümü)
// $db (PDO) ve bakiye_kilitle, bakiye_ekle, islem_bul, islem_yaz, iade_yer_tutucu_var: kendi şemanıza göre yazılır
header('Content-Type: application/json');
http_response_code(200); // HER ZAMAN 200
function cevap(array $c): never { echo json_encode($c, JSON_UNESCAPED_UNICODE); exit; }
$ham = file_get_contents('php://input');
$zaman = $_SERVER['HTTP_X_ZFLOW_ZAMAN'] ?? '';
if (!zflow_imza_tutar(ZFLOW_SIFRE, $zaman, $ham, $_SERVER['HTTP_X_ZFLOW_IMZA'] ?? ''))
cevap(['tamam' => false, 'hata' => 'imza', 'mesaj' => 'İmza doğrulanamadı']);
if (!zflow_zaman_taze($zaman)) cevap(['tamam' => false, 'hata' => 'gecici', 'mesaj' => 'Saat farkı']);
$o = json_decode($ham, true);
if (($o['operator'] ?? '') !== ZFLOW_OPERATOR) cevap(['tamam' => false, 'hata' => 'imza', 'mesaj' => 'Operatör tutmuyor']);
try {
$db->beginTransaction();
$bakiye = bakiye_kilitle($db, $o['oyuncu']); // SELECT … FOR UPDATE; yoksa null
if ($bakiye === null) { $db->rollBack(); cevap(['tamam' => false, 'hata' => 'oyuncu', 'mesaj' => 'Oyuncu bulunamadı']); }
if ($o['olay'] === 'bakiye') { $db->commit(); cevap(['tamam' => true, 'bakiye' => $bakiye]); }
$onceki = islem_bul($db, $o['seri']); // aynı seri: para oynamaz
if ($onceki) { $db->commit(); cevap($onceki['tamam'] ? ['tamam' => true, 'bakiye' => $bakiye]
: ['tamam' => false, 'hata' => $onceki['hata'], 'bakiye' => $bakiye]); }
$t = (int) $o['tutar']; $tamam = true; $hata = null;
switch ($o['olay']) {
case 'bahis':
if (iade_yer_tutucu_var($db, $o['seri'])) break; // iadesi önce geldi: çekme
if ($bakiye < $t) { $tamam = false; $hata = 'yetersiz'; break; }
$bakiye = bakiye_ekle($db, $o['oyuncu'], -$t); break;
case 'kazanc':
$bakiye = bakiye_ekle($db, $o['oyuncu'], $t); break;
case 'iade':
$asil = islem_bul($db, $o['asilSeri']);
if ($asil && $asil['tamam']) $bakiye = bakiye_ekle($db, $o['oyuncu'], $t);
// asil bahis yoksa: bu iade satırı yer tutucudur (asil_seri ile aranır)
break;
default: $tamam = false; $hata = 'red';
}
islem_yaz($db, $o, $tamam, $hata); // seri PRIMARY KEY
$db->commit();
cevap($tamam ? ['tamam' => true, 'bakiye' => $bakiye]
: ['tamam' => false, 'hata' => $hata, 'bakiye' => $bakiye, 'mesaj' => $hata === 'yetersiz' ? 'Bakiye yetersiz' : 'İşlem reddedildi']);
} catch (Throwable $e) {
if ($db->inTransaction()) $db->rollBack();
cevap(['tamam' => false, 'hata' => 'gecici', 'mesaj' => 'Geçici sorun']); // oyun yeniden dener
}
Olay bildirimleri
Sağlayıcı tarafındaki değişiklikler (oyun durumu, yeni ya da güncellenen oyun, bakım, duyuru, anahtar yenileme) sitenize anında bildirilir. Bildirimler kaydınızdaki bildirimUrl adresine gider; adresi iş ortağı panelinde Entegrasyon sayfasından girersiniz. Adres boşsa aynı gövde cüzdan geri çağrı adresinize gönderilir.
<bildirimUrl>imzalısiz uygularsınız| Alan | Tür | Açıklama |
|---|---|---|
tur | string | Olay türü (aşağıdaki tablo). Cüzdan çağrılarındaki tur numarasıyla karıştırmayın. |
olay_id | string | Tekil olay kimliği; yeniden denemede aynı kalır. |
zaman | number, ms | Gönderim zamanı; X-Zflow-Zaman ile aynı, her denemede tazelenir. |
operator | string | Operatör kodunuz; kendi kodunuzla karşılaştırın. |
veri | object | Türe göre içerik. |
- İmza: cüzdan çağrılarıyla aynı üç başlık ve aynı şifre (Geri çağrı doğrulama). Kaynak IP
2.31.112.61. - Cevap:
HTTP 200ve{"tamam":true}. Başka her cevap (200 dışı durum, gövdesiz cevap,tamam:false, zaman aşımı) yeniden denenir. - Yeniden deneme: hemen, sonra 2, 5, 15, 60, 300 sn ve ardından her 300 sn; 24 saat sonra
vazgecildi. Teslim günlüğü iş ortağı panelindedir. - Tekillik:
olay_id'yi benzersiz anahtar olarak saklayın; aynı kimlik ikinci kez gelirse işlemeden{"tamam":true}dönün. - Sıra: olaylar sırasız gelebilir.
oyun.*olaylarındaveri.oyun.surumelinizdekinden küçükse yok sayın. Bildirimi önce kaydedip hızlıca 200 dönün, işi arka planda yapın.
Olay türleri
| tur | veri | Ne zaman |
|---|---|---|
oyun.eklendi | {oyun} (katalog oyunu) | Sitenize yeni oyun açıldı. |
oyun.guncellendi | {oyun} | Ad, görsel, RTP ya da sınır değişti. |
oyun.durum | {disKod, durum, bitis?, mesaj?}; durum acik | bakim | kapali | Oyun bakıma girdi, kapandı ya da yeniden açıldı. |
bakim.planlandi | {id, bas, bit, oyunlar, mesaj}; oyunlar dizi ya da "hepsi" | İleri tarihli bakım planlandı. |
bakim.basladi · bakim.bitti | {id} | Planlı bakım başladı / bitti. |
duyuru | {id, seviye, baslik, metin, bitis?}; seviye bilgi | uyari | kritik | Anka'dan sitelere duyuru. |
anahtar.yenilendi | {} | Şifreniz yenilendi. Yalnız uyarıdır: yeni şifre bildirimle gitmez, panelden alınır. |
deneme | {} | Panelde "bildirimi dene" düğmesi. |
{
"tur": "oyun.durum",
"olay_id": "ev_000184213",
"zaman": 1793880000000,
"operator": "ornek-site",
"veri": { "disKod": "hurkus", "durum": "bakim", "bitis": "2026-11-06T03:00:00.000Z", "mesaj": "Planlı bakım" }
}
{
"tur": "bakim.planlandi",
"olay_id": "ev_000184216",
"zaman": 1793880180000,
"operator": "ornek-site",
"veri": { "id": 12, "bas": "2026-11-06T02:00:00.000Z", "bit": "2026-11-06T03:00:00.000Z", "oyunlar": "hepsi", "mesaj": "Sunucu bakımı" }
}
{
"tur": "duyuru",
"olay_id": "ev_000184219",
"zaman": 1793880240000,
"operator": "ornek-site",
"veri": { "id": 7, "seviye": "bilgi", "baslik": "Yeni oyun yakında", "metin": "Kaan temalı yeni crash oyunu Aralık'ta katalogda.", "bitis": "2026-12-01T00:00:00.000Z" }
}
oyun.eklendi ve oyun.guncellendi örnekleri (tam katalog oyunuyla) API başvurusunda ve Postman koleksiyonunun Olay bildirimi örnekleri klasöründedir.
Önerilen işleme
| Olay | Siteniz ne yapmalı |
|---|---|
oyun.durum · bakim / kapali | Oyunu lobiden hemen gizleyin; bitis varsa "Bakımda · saat" gösterin. |
oyun.durum · acik | Oyunu yeniden gösterin. |
oyun.eklendi · oyun.guncellendi | Kataloğu yenileyin (GET /api/katalog) ya da gelen oyun nesnesini surum karşılaştırarak yazın. |
bakim.* · duyuru | Personel ekranınızda gösterin; isterseniz oyunculara duyurun. |
anahtar.yenilendi | Ekibinizi uyarın; yeni şifreyi panelden alıp sunucunuza yazın. Bu sürede bildirimler ve cüzdan çağrıları imza hatası alır (yeniden denenir). |
// imzaTutar ve zamanTaze: "Geri çağrı doğrulama" bölümü
const islenen = new Set(); // gerçekte: veritabanı, olay_id UNIQUE
export async function bildirim(ham, basliklar) {
if (!imzaTutar(SIFRE, basliklar['x-zflow-zaman'], ham, basliklar['x-zflow-imza'])) return { durum: 401 };
const o = JSON.parse(ham.toString('utf8'));
if (o.operator !== OPERATOR) return { durum: 401 };
if (islenen.has(o.olay_id)) return { durum: 200, govde: { tamam: true } }; // tekrar
islenen.add(o.olay_id);
switch (o.tur) {
case 'oyun.durum':
lobi.goster(o.veri.disKod, o.veri.durum === 'acik', o.veri.bitis); break;
case 'oyun.eklendi': case 'oyun.guncellendi':
kuyruk.ekle('katalog-yenile'); break;
default:
personelEkrani.yaz(o); // bakim.*, duyuru, anahtar.yenilendi, deneme
}
return { durum: 200, govde: { tamam: true } };
}
Bakım ve duyuru
- Bakım tüm oyunlara ya da seçili oyunlara, tüm sitelere ya da seçili sitelere uygulanabilir; hemen ya da planlı (
bas/bit). - Bakım başlayınca yeni tur açılmaz (açık tur normal biter, sıradaki bahisler iade edilir),
/api/ac503 bakimdöner, oyuncu ekranında "Kısa süreli bakım" kartı çıkar, katalogdadurum:"bakim"görünür veoyun.durum+bakim.basladibildirimleri gider. Bitince tersi olur. - Duyurular bildirimle, iş ortağı paneli şeridinde ve isteğe bağlı oyun içi şeritte görünür.
Oyun kuralları ve adalet
Tur
- Bahis fazı (varsayılan 5 sn) → uçuş → çöküş (varsayılan 3 sn bekleme) → yeni tur.
- Oyuncunun iki bahis kutusu vardır; her kutuya turda bir bahis. Otomatik bırakma çarpanı 1.01 ile grubun oto tavanı arasındadır.
- Uçuş sırasında basılan bahis sonraki tura sıraya girer; para o tur başlarken çekilir. İptal yalnız bahis fazında mümkündür.
- Çarpan zamanla üstel büyür:
m(t) = floor(100 · e^(k·t)) / 100,k = ln 2 / ikiKatSaniye(varsayılan 6 sn'de 2.00x). - Bırakma sunucu saatiyle hesaplanır:
kazanç = min(floor(bahis × m), enÇokKazanç, günlük tavandan kalan). - Turun çöküş noktası tektir ve oyuncuya göre asla değişmez.
RTP
Hangi çarpanda bırakılırsa bırakılsın beklenen dönüş x · (1 − e) / x = 1 − e olur; RTP oyuncu stratejisinden bağımsızdır. Çarpan tavanı ve risk grubu kazanç sınırları RTP'yi çok az düşürebilir. Kasa payı tur açılırken belirlenir ve tur boyunca herkes için aynıdır.
Çöküş formülü
- Sunucu tohumu gizli bir sırdan türetilir ve veritabanında saklanmaz. Tur açılırken yalnız SHA-256 özeti (
tohumOzet) yayınlanır; tohumun kendisi tur bitince açıklanır. Tur bitmeden hiç kimse, panel dahil, çöküşü bilemez. - İstemci tohumu: turun ilk üç bahsindeki oyuncu tohumları bahis sırasıyla
|ile birleştirilip SHA-256 alınır; bahis yoksasha256("zflow"). Uçuş başlarken sabitlenir.
Doğrulama adımları
- Özeti not edinTur açılırken oyundaki Provably Fair menüsünde görünen
tohumOzet'i alın. - Tohumları alınTur bitince
GET /api/dogrula?tur=<no>&operator=<kod>iletohum,istemciTohum,kasaPayi,tavandeğerlerini okuyun. - Özeti denetleyin
sha256(tohum)değeri, turdan önce gördüğünüztohumOzetile aynı olmalıdır. - Çöküşü hesaplayınFormülü kendiniz çalıştırın (aşağıda) ya da saf hesap ucunu kullanın; sonuç turdaki çöküşle aynı olmalıdır.
import { createHash, createHmac } from 'node:crypto';
export function cokus(sunucuTohumu, istemciTohumu, kasaPayi, tavan = 10000) {
const d = createHmac('sha256', sunucuTohumu).update(istemciTohumu).digest();
let h = 0n;
for (let i = 0; i < 7; i++) h = (h << 8n) | BigInt(d[i]);
h >>= 4n; // ilk 52 bit
const N = 1n << 52n, pay = BigInt(Math.round(kasaPayi * 100));
let k = ((10000n - pay) * N) / (100n * (N - h)); // çarpan × 100, aşağı yuvarlı
const t = BigInt(Math.max(100, Math.round(tavan * 100)));
if (k < 100n) k = 100n;
if (k > t) k = t;
return Number(k) / 100;
}
export const tohumOzeti = (tohum) => createHash('sha256').update(tohum).digest('hex');
export const istemciTohumu = (bahisTohumlari) =>
createHash('sha256').update(bahisTohumlari.length ? bahisTohumlari.slice(0, 3).join('|') : 'zflow').digest('hex');
// test vektörü → 16.65
cokus('7c2e0b5a9d41f3e8a6b1c0d9e2f3a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5', istemciTohumu([]), 3, 500);
Not: tohumlar HMAC'e onaltılık dizgi olarak (UTF-8 metin) girer, ikili değere çevrilmez.
RTP, sınırlar ve risk grupları
Her operatörün kendi ayarı vardır. Varsayılanlar temkinlidir; ayarları iş ortağı panelinden ya da yönetim ucundan (PUT /api/yonetim/ayar) değiştirirsiniz. Her değişiklik önce/sonra/kim bilgisiyle geçmişe yazılır ve en geç 15 saniyede, tur içinde değil bir sonraki turdan etkinleşir. Tutarlar kuruştur; aşağıdaki ₺ karşılıkları TRY içindir.
RTP seçenekleri
Sağlayıcı her oyun için izinli RTP seçeneklerini belirler; siteniz bunlardan birini seçer (iş ortağı paneli → Oyunlar). kasaPayi = 100 − RTP. Seçim değişince oyun.guncellendi bildirimi gider ve katalogdaki rtp güncellenir. Oyuncu bazlı RTP yoktur: tur herkes için ortaktır.
| Oyun | İzinli RTP | Varsayılan |
|---|---|---|
Hürkuş K-VI (hurkus) | %95 · %96 · %97 | %97 (kasaPayi 3) |
Sınırlar yalnız sıkılaştırılabilir. Risk grupları, çarpan tavanı, tur ve pozisyon tavanı ile günlük tavan için Anka sitenize bir üst sınır koyar. Siz bu değerleri yalnız aşağı çekebilirsiniz; sunucu min(site, sağlayıcı) uygular ve üst sınırı aşan değeri reddeder.
Genel ayarlar
| Ayar | Aralık | Varsayılan | Anlamı |
|---|---|---|---|
acik | boolean | true | Kapalıysa tur açılmaz, oyuncu "kısa süreliğine kapalı" kartını görür. |
kasaPayi | 0,5–15 (%) | 3 | Kasa payı; RTP = 100 − kasaPayi. Yalnız izinli RTP seçeneklerine karşılık gelen değerler (Hürkuş: 3, 4, 5). |
kasaPayiSaatlik | 24 değer | null | null | İstanbul saatine göre saat başına kasa payı; tur açılırken o saatin değeri alınır ve turda sabittir. |
ikiKatSaniye | 3–12 sn | 6 | Çarpanın 2.00x'e ulaşma süresi; oyunun hızı. |
bahisSuresiSn | 3–15 sn | 5 | Her turdan önce bahis alınan süre. |
cokusBeklemeSn | 2–6 sn | 3 | Çöküşten sonra yeni tura kadar bekleme. |
carpanTavani | 2–10000 | 500 | Bir turun ulaşabileceği en yüksek çarpan. |
turEnCokBahisAdet | 10–5000 | 1000 | Bir turda alınacak en çok bahis sayısı. |
turEnCokBahisTutar | kuruş | 5.000.000 (50.000 ₺) | Bir turda alınacak toplam bahis tutarı. |
pozisyonTavani | kuruş | 20.000.000 (200.000 ₺) | Turdaki açık bahislerin en kötü durumda ödeyebileceği toplam; aşacak yeni bahis alınmaz. |
devralmaEsigiSn | 5–120 sn | 20 | Arıza sonrası uçuştaki tur bu süreden eskiyse iptal edilir ve bahisler iade edilir. |
hizliTutarlar | 4 × kuruş | 10 · 20 · 50 · 100 ₺ | Bahis kutusundaki hızlı tutar düğmeleri. |
hiz.bahisDk | 5–600 | 60 | Oyuncunun dakikada koyabileceği en çok bahis. |
hiz.baglantiDk | 5–600 | 20 | Dakikada izin verilen en çok bağlantı. |
rtpSapmaUyari | 1–50 puan | 8 | Gerçekleşen RTP beklenenden bu kadar saparsa raporda işaretlenir (en az 200 bahis). |
buyukKazanc | kuruş | 500.000 (5.000 ₺) | Bu tutar ve üstü kazanç "büyük kazanç" sesiyle kutlanır ve raporda işaretlenir. |
metinler | anahtar → metin | {} | Arayüz metinlerini değiştirir; boş anahtar varsayılan metni kullanır. |
Risk grupları
Her oyuncu bir gruptadır: yeni, normal (varsayılan), vip, supheli. Grup /api/ac isteğindeki risk alanıyla ya da PUT /api/yonetim/oyuncu/:kod/risk ile atanır.
| Sınır | yeni | normal | vip | supheli |
|---|---|---|---|---|
enAzBahis | 1 ₺ | 1 ₺ | 1 ₺ | 1 ₺ |
enCokBahis | 200 ₺ | 1.000 ₺ | 5.000 ₺ | 50 ₺ |
enCokKazanc | 2.000 ₺ | 10.000 ₺ | 50.000 ₺ | 500 ₺ |
carpanTavani | 200x | 500x | 500x | 50x |
otoTavani | 200x | 500x | 500x | 50x |
gunlukKazancTavani | 10.000 ₺ | 50.000 ₺ | 200.000 ₺ | 2.000 ₺ |
enAzBahis/enCokBahis- Tek bahsin alt ve üst tutarı.
enCokKazanc- Tek bahiste ödenecek en yüksek kazanç; fazlası ödenmez.
carpanTavani- Grubun ulaşabileceği en yüksek çarpan. Genel tavandan düşükse bahis o çarpanda kendiliğinden bırakılır; elle bırakmada da fazlası ödenmez.
otoTavani- Otomatik bırakma çarpanı için girilebilecek en yüksek değer.
gunlukKazancTavani- Oyuncunun bir günde (İstanbul saati) bu oyundan elde edebileceği en yüksek net kazanç (kazanç − bahis); aşan kısım ödenmez.
Yönetim uçları
Önek /api/yonetim/. Hepsi imzalıdır ve yalnız imzalayan operatörün verisini görür. Başarıda gövde doğrudan nesnedir (tamam alanı yoktur); hata gövdesi {tamam:false, hata, mesaj}. kim alanı değişikliği yapan kişiyi kayda yazar. Alanların tamamı ve örnekler: API başvurusu.
| Uç | Açıklama |
|---|---|
GET ozet | Bugünkü bahis, kazanç, GGR, RTP; açık tur; operatör bilgisi; bekleyen ve vazgeçilen çağrı sayısı. |
GET operator | Operatör kaydınız (şifre hariç). |
GET ayar | {ayar} (bkz. Sınırlar). |
PUT ayar | {ayar, kim} → {ayar}. Tam ayar gönderin: eksik alanlar mevcut değere değil varsayılana döner (önce GET, sonra PUT). Doğrulanır; bağlı oyunculara yayınlanır. |
GET ayar-gecmisi?limit=50 | [{id, kim, zaman, once, sonra}] |
GET turlar?once=<no>&limit=50 | Tur listesi: çöküş, bahis adedi ve toplamları, tohum özeti. |
GET tur/:no | Tur ayrıntısı (tohumlar, zamanlar) ve turdaki bahisler. |
GET rapor?bas=&bit=&kirilim= | Tarihler YYYY-MM-DD (İstanbul günü); kırılım gun | saat | oyuncu | risk. {beklenenRtp, satirlar:[{anahtar, bahisAdet, bahisToplam, kazancToplam, ggr, rtp, sapma}]} |
GET oyuncular?ara=&risk=&limit=50 | Oyuncu listesi ve son 7 günün toplamları. |
GET oyuncu/:kod | Oyuncu kartı: risk grubu, son 24 saat, son 20 bahis. |
PUT oyuncu/:kod/risk | {risk, kim} → {tamam, risk} |
GET mutabakat?limit=100 | Bekleyen, vazgeçilen ve reddettiğiniz kazanç/iade çağrıları: [{id, olay, seri, bahisId, tutar, deneme, hata, olusturma, durum}] |
GET varliklar | Ses ve görsel yuvaları (logo, uçak, arka plan, sesler). |
PUT varlik/:yuva | İkili gövde (Content-Type dosya türü), başlık X-Zflow-Varlik-Meta: {"kim":"…","acik":true,"ses":0.8}. Bu istekte imza boş gövde üzerinden hesaplanır. |
PATCH varlik/:yuva | {acik?, ses?, kim} |
DELETE varlik/:yuva?kim= | Varsayılana döner (kim şu an kayda yazılmaz). |
GET tema | {tema, font, ad, metinler} |
PUT tema | {tema?, font?, ad?, metinler?, kim} |
Mutabakat ve GGR ekstresi
Günlük mutabakat
- Defterinizdeki Hürkuş hareketlerini günlük olarak
GET /api/yonetim/rapor?kirilim=guntoplamlarıyla karşılaştırın (İstanbul günü). GET /api/yonetim/mutabakatlistesi boş olmalıdır. Buradaki kayıtlar size ulaşmamış ya da reddettiğiniz kazanç/iade çağrılarıdır; sağlayıcıyla birlikte kapatılır.
GGR
Yalnız sonuçlanmış bahisler (bırakılan ya da kaybeden) sayılır. İade edilen ve reddedilen bahisler ile demo oturumları GGR'ye girmez. Test kipindeki operatörler ekstreye girmez.
Aylık ekstre
Her takvim ayı (YYYY-MM) için operatör başına bir ekstre satırı hesaplanır. Dönemler İstanbul saatine (Europe/Istanbul) göre kesilir.
- oran: sözleşmenizdeki sağlayıcı payı (%).
- Eksi GGR devreder: bir ay oyuncular kasadan fazla kazanırsa eksi tutar sonraki ayın GGR'sinden düşülür; eksi ay için hakediş sıfırdır.
- Ay bitmeden ekstre canlı hesaplanır. Ay bittikten sonra sağlayıcı satırı kesinleştirir: bir kez yazılır ve değişmez;
devredenbir önceki kesin ekstreden gelir.
| Örnek (oran %10) | GGR | Devreden | Matrah | Hakediş | Sonraki devir |
|---|---|---|---|---|---|
| Ekim | −40.000 ₺ | 0 ₺ | 0 ₺ | 0 ₺ | −40.000 ₺ |
| Kasım | 100.000 ₺ | −40.000 ₺ | 60.000 ₺ | 6.000 ₺ | 0 ₺ |
API başvurusu
Bu bölüm openapi.json dosyasından oluşturulur. Her uçta alanlar, örnek istek (cURL, Node.js, PHP, Python; imza kodu dahil), örnek cevaplar ve isteği tarayıcıda imzalayıp gönderen Dene paneli vardır.
Dene paneli yalnız test içindir. Sunucu docs.ormicast.store kökeninden gelen tarayıcı isteklerini yalnız test kipindeki operatörler için kabul eder. Şifre yalnız bu sekmenin oturum belleğinde (sessionStorage) tutulur ve sekme kapanınca silinir. IP izni listeniz doluysa tarayıcınızın çıkış IP'si de listede olmalıdır.
API başvurusu yükleniyor…
Hata kodları
API cevapları
API uçları hatada uygun HTTP durumu ve {tamam:false, hata, mesaj} gövdesi döner.
| HTTP | hata | Anlamı |
|---|---|---|
| 400 | gecersiz | Alan doğrulaması başarısız; mesaj alanı ve kuralı söyler. |
| 400 | govde_bozuk | Gövde JSON olarak çözülemedi. |
| 400 | para_birimi | İstekteki para birimi kaydınızdakiyle aynı değil. |
| 401 | imza | Başlık yok, operatör tanınmadı ya da imza tutmadı. mesaj: X-Zflow-Operator başlığı yok, operatör ya da imza tanınmadı, imza_yok, zaman_gecersiz, imza_tutmadi, eski_zaman. |
| 401 | oturum_yok | Oyuncu jetonu geçersiz ya da süresi doldu (oyun ekranı uçları). |
| 403 | kapali | Operatör kaydı kapalı. |
| 403 | ip | İstek izinli olmayan bir IP adresinden geldi. |
| 404 | bulunamadi | Tur, oyuncu ya da uç bulunamadı. |
| 415 | gecersiz | Gövde application/json değil. |
| 503 | bakim | Oyun bakımda (/api/ac, /api/demo); gövdede mesaj ve varsa bitis. |
| 500 | kaynak_hatasi | Beklenmeyen sunucu hatası; yeniden deneyin, sürerse destekle iletişime geçin. |
Cüzdan cevap kodları
yetersiz · oyuncu · imza · gecici · para_birimi · red — ayrıntı: Cüzdan cevap biçimi.
Oyuncunun gördüğü bahis retleri
Destek ekibiniz için: oyuncunun bahsi oyun içinde şu sebeplerle alınmayabilir.
| Kod | Oyuncuya gösterilen |
|---|---|
kapali | Oyun şu anda kapalı |
bahis_kapali | Bahis alınmıyor |
tutar | Tutar sınırların dışında |
oto | Otomatik bırakma çarpanı geçersiz |
pozisyon | Bu tur için bahis sınırına ulaşıldı |
tur_dolu | Bu turda daha fazla bahis alınmıyor |
kutu_dolu | Bu kutuda zaten bahsiniz var |
hiz | Çok hızlı bahis; biraz bekleyin |
yetersiz | Bakiye yetersiz |
bakim | Kısa süreli bakım · bitiş saati |
red | Bahis kabul edilmedi (ya da cüzdanınızın mesajı) |
gecici | Geçici bir sorun oldu, yeniden deneyin |
Sürüm notları
| Sürüm | Tarih | Değişiklik |
|---|---|---|
| v1.0 | 05.11.2026 | İlk yayın: HMAC imza, /api/ac (kısa /o/<jeton> açılış adresi, 503 bakim), /api/demo ve açık demo linki, /api/katalog (durum, surum, guncelleme, ETag / 304), /api/dene, /api/dogrula; cüzdan geri çağrıları (bakiye, bahis, kazanc, iade) ve yeniden deneme takvimi; olay bildirimleri (oyun.*, bakim.*, duyuru, anahtar.yenilendi, deneme); RTP seçenekleri, operatör ayarları ve risk grupları; yönetim uçları; aylık GGR ekstresi; iş ortağı paneli; OpenAPI 3.1, Postman koleksiyonu ve tarayıcıda Dene paneli. |
Durum
Durum denetleniyor… · https://api.ormicast.store/saglik → {"durum":"ok"}
İzleme sisteminize bu adresi ekleyin: durum ok ise API trafik alıyordur; kapaniyor (HTTP 503) bir kopyanın yayın sırasında devreden çıktığını gösterir.