cloneapi.betxsolutions.net v4 · OAS3 · REST/JSON
🔶 Betx Clone API — Geliştirici Dokümantasyonu

Betx Clone API
v4 Referans Kılavuzu

Casino oyun entegrasyonu için tam kapsamlı REST API. Transfer ve Seamless (Callback) modlarını destekler. Tüm istekler cloneapi.betxsolutions.net üzerinden yönetilir.

BASE URLhttps://cloneapi.betxsolutions.net
VERSİYONv4
FORMATJSON
METHODPOST

§01 Kimlik Doğrulama

Tüm API isteklerinde aşağıdaki HTTP başlıkları zorunludur. API TOKEN değerini yönetici panelinizin Ayarlar bölümünden öğrenebilirsiniz.

BaşlıkDeğerÖrnek
AuthorizationBearer {API_TOKEN}Authorization: Bearer ed45553e-1702-4342-a70d-09bf7ff7f568
Acceptapplication/jsonAccept: application/json
Content-Typeapplication/jsonContent-Type: application/json
Örnek cURL
curl -X POST https://cloneapi.betxsolutions.net/v4/agent/info \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json"
⚠️
Aynı IP'den eş zamanlı çağrı sayısı 10 ile sınırlıdır. Aşılırsa SERVER_IS_BUSY (1018) döner.

§02 Dil Desteği

İsteklerde "lang" parametresiyle dil seçilir.

DeğerDilDestekleyen Sağlayıcılar
1İngilizce 🇬🇧Pragmatic Play, CQ9, PG, Booongo, Playson, Habanero, Jili, PlayStar, XGaming, Hacksaw
2Korece 🇰🇷Pragmatic Play, CQ9, PG, Booongo, Playson, Habanero, Jili, XGaming
3Tayca 🇹🇭Pragmatic Play, CQ9, PG, Booongo, Playson, Habanero, Jili, PlayStar, XGaming, Hacksaw
4İspanyolca 🇪🇸Pragmatic Play, CQ9, PG, Booongo, Playson, Jili, Hacksaw
5Japonca 🇯🇵Pragmatic Play, CQ9, PG, Booongo, Playson, Jili, XGaming, Hacksaw
6Portekizce 🇧🇷Pragmatic Play, CQ9, PG, Booongo, Playson, Jili, XGaming, Hacksaw
7Türkçe 🇹🇷Pragmatic Play, PG, Booongo, Playson, Hacksaw
8Almanca 🇩🇪Pragmatic Play, PG, Booongo, Playson, Hacksaw
9Endonezce 🇮🇩Pragmatic Play, CQ9, PG, Jili, PlayStar, XGaming
10Malayca 🇲🇾Pragmatic Play
11Çince (Basit) 🇨🇳Pragmatic Play, CQ9, PG, Jili, PlayStar, XGaming, Hacksaw
12Vietnamca 🇻🇳Pragmatic Play, CQ9, PG, Jili, PlayStar, XGaming, Hacksaw
13Birmanca 🇲🇲Pragmatic Play, Jili
14Rusça 🇷🇺Pragmatic Play
15–17Bulgarca / Hırvatça / ÇekçePragmatic Play, XGaming
18–33Danca, Estonca, Fince, Fransızca, Yunanca, Macarca, İtalyanca, Letonca, Litvanyaca, Norveçce, Lehçe, Romence, Sırpça, Slovakça, İsveççe, Çince (Geleneksel)Pragmatic Play

§03 İşlem Tipleri

DeğerTipAçıklama
1BetBahis
16BetCancelBahis iptali
2WinKazanım
32BonusCallBonus-Call kazanımı
4DepositPuan yükleme
8WithdrawPuan çekme
🗂️
İnceleme zamanından 2 gün öncesine ait işlemler otomatik silinir.

§04 Hata Kodları

Kod AdıDeğerAçıklama
OK0Başarılı
UNDER_MAINTENANCE1Bakım modu aktif
INTERNAL_SERVER_ERROR1001Sunucu iç hatası
VALIDATION_ERROR1002İstek verisi format hatası
SERVICE_EXCEPTION1003Servis istisnası
TOKEN_NOT_FOUND1007API tokeni bulunamadı
TOKEN_INVALID1009API tokeni geçersiz
PERMISSION_ERROR1010Erişim izni yok
PROVIDER_ERROR1011Oyun sağlayıcı hatası
PARAMETERS_INVALID1012Parametre hatası
CALLBACK_ERROR1015Callback hatası
SERVER_IS_BUSY1018Eş zamanlı çağrı limiti aşıldı (maks. 10/IP)
IP_NOT_ALLOWED1020IP'ye izin verilmiyor
AGENT_NOT_FOUND2001Ajan bulunamadı
USER_NOT_FOUND2002Kullanıcı bulunamadı
GAME_NOT_FOUND2003Oyun bulunamadı
POINT_NOT_ENOUGH2005Ajan puan bakiyesi yetersiz
BALANCE_NOT_ENOUGH2006Kullanıcı bakiyesi yetersiz
PROVIDER_NOT_FOUND2007Sağlayıcı bulunamadı
BONUSCALL_DOUBLE2011Mükerrer bonus-call
BONUSCALL_ALEADY_ENDED2012Bonus-call zaten sona erdi
ROUND_NOT_FOUND2013Tur bilgisi bulunamadı
CURRENCY_NOT_SUPPORTED2014Desteklenmeyen para birimi

1 Ajan Hesabı

POST
/v4/agent/info
Ajan bilgilerini döner (ad, bakiye, RTP, para birimi).
Yanıt
{ "code":0, "message":"OK", "data":{ "name":"ajanadi", "currency":2, "balance":50000, "rtp":0 } }
POST
/v4/agent/rtp
Ajan RTP değerini değiştirir.
İstek / Yanıt
// İstek   { "rtp": 0 }
// Yanıt   { "code": 0, "message": "OK" }
POST
/v4/agent/callback-test
Callback URL'yi test eder.

2 Kullanıcı Hesabı

POST
/v4/user/create
Kullanıcı oluşturur, user_code döner. Aynı ad varsa mevcut bilgi döner.
⚠️
Transfer↔Seamless geçişinde eski user_code kullanılamaz. Her oturumda yeni kod alın.
İstek / Yanıt
// İstek
{ "name": "kullaniciadi" }
// Yanıt
{ "code":0, "data":{ "user_code":3, "is_new_user":true } }
POST
/v4/user/info
Kullanıcı bilgisini döner.
İstek / Yanıt
{ "user_code": 3 }   // → { "name":"kullaniciadi", "balance":26500 }

3 Kullanıcı Cüzdanı — Yalnızca Transfer Modu

POST
/v4/wallet/deposit
Kullanıcıya bakiye yükler; tutar ajan puanından düşülür.
İstek
{ "user_code": 3, "amount": 50000 }
POST
/v4/wallet/withdraw
Belirtilen tutarı kullanıcıdan çeker; ajan puanına eklenir.
İstek
{ "user_code": 3, "amount": 10000 }
POST
/v4/wallet/withdraw-all
Kullanıcının tüm bakiyesini çeker.
İstek
{ "user_code": 3 }

4 Oyun Detayları

POST
/v4/game/providers
Ajana atanmış sağlayıcı listesini döner.
İstek / Yanıt
// İstek
{ "lang": 1 }
// Yanıt
{ "provider_id":1, "provider_name":"Pragmatic Play", "status":1 }
POST
/v4/game/games
Sağlayıcıya ait oyun listesini döner. provider_id gereklidir.
İstek
{ "provider_id": 1, "lang": 1 }
POST
/v4/game/all
Tüm sağlayıcıların oyunlarını tek seferde döner. İstek gövdesi gerekmez.

5 Oyun Başlatma

POST
/v4/game/game-url
Oyun URL'si döner. 10 dakika geçerli, tek kullanımlık.
💡
Kullanıcıya özel RTP için rtp parametresini kullanın (0 = ajan RTP'si).
İstek
{
  "user_code":  400000001,
  "provider_id":1,
  "game_symbol":"vswaysdogs",
  "lang":       1,
  "return_url": "",
  "rtp":        0
}
POST
/v4/game/online-games
Son 30 dakika içinde bağlanan aktif oyun listesi. gplay_id bonus-call'da kullanılır.
POST
/v4/game/call_config
Bonus-call minimum tutarını döner (call_min).
POST
/v4/game/call_start
Oyuna bonus-call uygular. gplay_id aktif oyun listesinden alınır.
İstek
{ "gplay_id":1, "set_point":10000, "type":0, "memo":"bonus" }
POST
/v4/game/call_cancel
Devam eden bonus-call'u iptal eder. call_id gereklidir.
İstek
{ "call_id": 1 }

6 Oyun İşlem Geçmişi

🌍
Zaman dilimi UTC(0)'dır. Sorgu zamanlarını UTC olarak gönderin.
POST
/v4/game/transaction
Zamana göre işlem arar. Maks. 2000 kayıt. Ardışık istekler arası ≥ 30 saniye bekleyin.
İstek
{ "start_time":"2024-01-01 00:00:00", "end_time":"2024-01-01 01:00:00", "offset":0, "limit":100 }
POST
/v4/game/transaction-id
ID'ye göre arar. İlk çağrıda last_id: 0, sonrakinde dönen son ID.
İstek
{ "last_id": 0, "limit": 100 }
POST
/v4/game/round-details
Tur detay sayfası URL'si döner. Son 30 gün sorgulanabilir.
İstek
{ "user_code":3, "round_id":"12345713400010008", "provider_id":1, "game_code":"vswaysdogs" }

7 İstatistik

POST
/v4/statistics/user
Kullanıcı bazlı slot/canlı/mini oyun istatistikleri.
İstek
{ "start_time":"2024-01-01T00:00:00Z", "end_time":"2024-01-31T23:59:59Z", "offset":0, "limit":2000 }

CB Callback API (Seamless)

Seamless modunda kullanıcı bakiyesi sizin sunucunuzda tutulur. Her bahis/kazanım olayında Callback URL'nize POST isteği gelir.

1
URL Ayarla
Panelden
2
İncele
PHP örneğini oku
3
Geliştir
Tüm komutları yaz
4
Test Et
Sanal veriyle
5
Onay Al
Yöneticiyle iletişim
6
Canlıya Al
Gerçek test

Gelen HTTP Başlıkları

Callback-Token: CALLBACK_TOKEN_DEGERI
Accept: application/json
Content-Type: application/json
⏱️
Timeout: bet ve balance2 saniye. Diğer komutlar → 4 saniye.
🔄
Retry: win/cancel → 50 tekrar. balance → 3 tekrar. bet hatası → otomatik cancel gönderilir.
🚨
Tüm komutları uygulamak zorunludur. Eksik uygulama sonucu oluşan zararlardan sorumlusunuz.

CB Callback Komutları

authenticateKullanıcı Kimlik Doğrulama
Beklenen Yanıt
{ "result":0, "status":"OK", "data":{ "account":"kullanici_adi", "balance":50000 } }
balanceBakiye Sorgulama — ≤ 2 sn
Beklenen Yanıt
{ "result":0, "status":"OK", "data":{ "balance":50000 } }
betBahis İşleme — ≤ 2 sn

Bakiyeden amount düşün, trans_guid'yi kaydedin (idempotency). Hata → sistem cancel gönderir.

Beklenen Yanıt
{ "result":0, "status":"OK", "data":{ "balance":49500 } }
winKazanım Kredileme — ≤ 4 sn

amount: 0 gelse de işlemi kaydedin ve bakiyeyi döndürün.

Beklenen Yanıt
{ "result":0, "status":"OK", "data":{ "balance":52500 } }
cancelİşlem İptali — ≤ 4 sn

cancel_trans_guid ile orijinal işlemi tersine çevirin. Zaten iptal edilmişse yeniden işlem yapmadan başarı döndürün.

Beklenen Yanıt
{ "result":0, "status":"OK", "data":{ "balance":50000 } }
statusİşlem Durum Sorgulama
Beklenen Yanıt
{ "result":0, "status":"OK", "data":{ "account":"kullanici_adi", "trans_guid":"abc-123", "trans_status":"OK" } }

CB PHP Örnek Kodu

📝
Bakiye ve tutarlar int tipinde olmalı. intval() kullanın. Kullanıcı ID'si string (4–15 karakter).
callback.php
// Token doğrulama
const CALLBACK_TOKEN = 'PANELDEN_ALINAN_TOKEN';
$headers = apache_request_headers();
if (trim($headers['Callback-Token'] ?? '') !== CALLBACK_TOKEN)
    returnErr(['result'=>100, 'status'=>'ERROR']);

$db  = new mysqli("localhost", "DB_USER", "DB_PASS", "casino");
$d   = json_decode(file_get_contents('php://input'));
$cmd = $d->command;

// Checklist kontrolleri (21,22,31,41,42,43)
$user = $bet = null;
foreach (explode(',', $d->check ?? '') as $c) {
    switch((int)$c) {
        case 21: $user=$db->query("SELECT * FROM user_casino WHERE user_id='".$db->real_escape_string($d->data->account)."'")->fetch_assoc(); if(!$user) errReturn($c); break;
        case 22: if($user['status']!=='Active') errReturn($c); break;
        case 31: if($user['money']$d->data->amount)) errReturn($c,$user['money']); break;
        case 41: if($db->query("SELECT 1 FROM bet_casino WHERE trans_guid='".$db->real_escape_string($d->data->trans_guid)."'")->num_rows>0) errReturn($c,$user['money']); break;
        case 42: $bet=$db->query("SELECT * FROM bet_casino WHERE trans_guid='".$db->real_escape_string($d->data->trans_guid)."'")->fetch_assoc(); if(!$bet) errReturn($c,$user['money']); break;
        case 43: $bet=$db->query("SELECT * FROM bet_casino WHERE trans_guid='".$db->real_escape_string($d->data->cancel_trans_guid)."'")->fetch_assoc(); if(!$bet) errReturn($c,$user['money']); break;
    }
}

switch($cmd) {
    case 'authenticate': ok(['account'=>$user['user_id'], 'balance'=>(int)$user['money']]); break;
    case 'balance':      ok(['balance'=>(int)$user['money']]); break;
    case 'bet':
        $amt=intval($d->data->amount); $uid=$user['user_id']; $g=$db->real_escape_string($d->data->trans_guid);
        $db->query("INSERT INTO bet_casino VALUES ('$g','$uid','".$db->real_escape_string($d->data->game_code)."','".$db->real_escape_string($d->data->round_id)."','BET',$amt,".time()."')");
        $db->query("UPDATE user_casino SET money=money-$amt WHERE user_id='$uid'");
        ok(['balance'=>(int)$user['money']-$amt]); break;
    case 'win':
        $amt=intval($d->data->amount); $uid=$user['user_id']; $g=$db->real_escape_string($d->data->trans_guid);
        $db->query("INSERT INTO bet_casino VALUES ('$g','$uid','".$db->real_escape_string($d->data->game_code)."','".$db->real_escape_string($d->data->round_id)."','WIN',$amt,".time()."')");
        if($amt>0) $db->query("UPDATE user_casino SET money=money+$amt WHERE user_id='$uid'");
        ok(['balance'=>(int)$user['money']+$amt]); break;
    case 'cancel':
        $uid=$user['user_id']; $nb=(int)$user['money']; $cg=$db->real_escape_string($d->data->cancel_trans_guid);
        if($bet['sort']!=='CANCEL'){
            $m=($bet['sort']==='BET'?1:-1)*(int)$bet['money']; $nb+= $m;
            $db->query("UPDATE bet_casino SET sort='CANCEL' WHERE trans_guid='$cg'");
            $db->query("UPDATE user_casino SET money=$nb WHERE user_id='$uid'");
        }
        ok(['balance'=>$nb]); break;
    case 'status':
        ok(['account'=>$user['user_id'],'trans_guid'=>$d->data->trans_guid,'trans_status'=>($bet['sort']==='CANCEL'?'CANCELED':'OK')]); break;
}

function ok($data){ returnErr(['result'=>0,'status'=>'OK','data'=>$data]); }
function errReturn($c,$bal=null){ $r=['result'=>(int)$c,'status'=>'ERROR']; if($bal!==null)$r['data']=['balance'=>(int)$bal]; returnErr($r); }
function returnErr($d){ header('Content-Type: application/json'); echo json_encode($d); exit; }
Betx Clone API
v4 · OAS3 · cloneapi.betxsolutions.net
Swagger JSON ↗