🔶 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ık | Değer | Örnek |
|---|---|---|
| Authorization | Bearer {API_TOKEN} | Authorization: Bearer ed45553e-1702-4342-a70d-09bf7ff7f568 |
| Accept | application/json | Accept: application/json |
| Content-Type | application/json | Content-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ğer | Dil | Destekleyen Sağlayıcılar |
|---|---|---|
| 1 | İngilizce 🇬🇧 | Pragmatic Play, CQ9, PG, Booongo, Playson, Habanero, Jili, PlayStar, XGaming, Hacksaw |
| 2 | Korece 🇰🇷 | Pragmatic Play, CQ9, PG, Booongo, Playson, Habanero, Jili, XGaming |
| 3 | Tayca 🇹🇭 | Pragmatic Play, CQ9, PG, Booongo, Playson, Habanero, Jili, PlayStar, XGaming, Hacksaw |
| 4 | İspanyolca 🇪🇸 | Pragmatic Play, CQ9, PG, Booongo, Playson, Jili, Hacksaw |
| 5 | Japonca 🇯🇵 | Pragmatic Play, CQ9, PG, Booongo, Playson, Jili, XGaming, Hacksaw |
| 6 | Portekizce 🇧🇷 | Pragmatic Play, CQ9, PG, Booongo, Playson, Jili, XGaming, Hacksaw |
| 7 | Türkçe 🇹🇷 | Pragmatic Play, PG, Booongo, Playson, Hacksaw |
| 8 | Almanca 🇩🇪 | Pragmatic Play, PG, Booongo, Playson, Hacksaw |
| 9 | Endonezce 🇮🇩 | Pragmatic Play, CQ9, PG, Jili, PlayStar, XGaming |
| 10 | Malayca 🇲🇾 | Pragmatic Play |
| 11 | Çince (Basit) 🇨🇳 | Pragmatic Play, CQ9, PG, Jili, PlayStar, XGaming, Hacksaw |
| 12 | Vietnamca 🇻🇳 | Pragmatic Play, CQ9, PG, Jili, PlayStar, XGaming, Hacksaw |
| 13 | Birmanca 🇲🇲 | Pragmatic Play, Jili |
| 14 | Rusça 🇷🇺 | Pragmatic Play |
| 15–17 | Bulgarca / Hırvatça / Çekçe | Pragmatic Play, XGaming |
| 18–33 | Danca, 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ğer | Tip | Açıklama |
|---|---|---|
| 1 | Bet | Bahis |
| 16 | BetCancel | Bahis iptali |
| 2 | Win | Kazanım |
| 32 | BonusCall | Bonus-Call kazanımı |
| 4 | Deposit | Puan yükleme |
| 8 | Withdraw | Puan çekme |
🗂️
İnceleme zamanından 2 gün öncesine ait işlemler otomatik silinir.
§04 Hata Kodları
| Kod Adı | Değer | Açıklama |
|---|---|---|
| OK | 0 | Başarılı |
| UNDER_MAINTENANCE | 1 | Bakım modu aktif |
| INTERNAL_SERVER_ERROR | 1001 | Sunucu iç hatası |
| VALIDATION_ERROR | 1002 | İstek verisi format hatası |
| SERVICE_EXCEPTION | 1003 | Servis istisnası |
| TOKEN_NOT_FOUND | 1007 | API tokeni bulunamadı |
| TOKEN_INVALID | 1009 | API tokeni geçersiz |
| PERMISSION_ERROR | 1010 | Erişim izni yok |
| PROVIDER_ERROR | 1011 | Oyun sağlayıcı hatası |
| PARAMETERS_INVALID | 1012 | Parametre hatası |
| CALLBACK_ERROR | 1015 | Callback hatası |
| SERVER_IS_BUSY | 1018 | Eş zamanlı çağrı limiti aşıldı (maks. 10/IP) |
| IP_NOT_ALLOWED | 1020 | IP'ye izin verilmiyor |
| AGENT_NOT_FOUND | 2001 | Ajan bulunamadı |
| USER_NOT_FOUND | 2002 | Kullanıcı bulunamadı |
| GAME_NOT_FOUND | 2003 | Oyun bulunamadı |
| POINT_NOT_ENOUGH | 2005 | Ajan puan bakiyesi yetersiz |
| BALANCE_NOT_ENOUGH | 2006 | Kullanıcı bakiyesi yetersiz |
| PROVIDER_NOT_FOUND | 2007 | Sağlayıcı bulunamadı |
| BONUSCALL_DOUBLE | 2011 | Mükerrer bonus-call |
| BONUSCALL_ALEADY_ENDED | 2012 | Bonus-call zaten sona erdi |
| ROUND_NOT_FOUND | 2013 | Tur bilgisi bulunamadı |
| CURRENCY_NOT_SUPPORTED | 2014 | Desteklenmeyen 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 balance → 2 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