Dokümantasyon
Tarayıcıda tek bir script, sunucunuzdan tek bir API çağrısı. Yayına geçmek için gereken her şey tek sayfada.
Hızlı başlangıç
Tarayıcı için public key'inize (pk_...) ve sunucunuz için secret key'inize (sk_...) ihtiyacınız var. İkisi de panelde, Siteler ve anahtarlar bölümünde.
1. Script'i ekleyin
Bu etiketi kullanıcıların kayıt olduğu, giriş yaptığı, offer'lara tıkladığı veya cashout talep ettiği sayfalara ekleyin. Kendini şu öznitelikten başlatır: data-key
<script src="https://cashoutguard.com/v1/agent.js" data-key="pk_live_YOUR_PUBLIC_KEY" async></script>
2. request_id'yi toplayıp sunucunuza gönderin
Önemli anda collect() fonksiyonunu olay adıyla çağırın. Dönen değer: { request_id, visitor_id }
const { request_id } = await CashoutGuard.collect({ event: 'cashout' });
collect() asla reject etmez. Başarısız olursa (engellendi, çevrimdışı, zaman aşımı) request_id: null ve bir hata metniyle resolve olur. Formu yine de gönderin, kararı sunucunuz versin.
3. Sunucunuzdan karar isteyin
Olayı, secret key'iniz header'da olacak şekilde /v1/evaluate adresine POST edin: Authorization: Bearer sk_live_...
Secret key'i asla tarayıcı koduna veya mobil uygulamaya koymayın. /v1/evaluate yalnızca sunucunuz tarafından çağrılmalı.
Evaluate isteği
POST https://cashoutguard.com/v1/evaluate bir hesap için tek bir olayı puanlar, onu cihazı, ağı ve ödeme adresiyle ilişkilendirir ve bir karar döndürür. JSON gönderin.
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
event | string | Zorunlu | signup, login, offer_click, conversion, cashout veya custom. |
account_id | string | Zorunlu | Kullanıcı ID'niz, en fazla 191 karakter. E-posta değil, anlamsız (opaque) bir ID kullanın. |
request_id | string | İsteğe bağlı | Tarayıcıdaki collect() fonksiyonundan gelir. 1 saat geçerlidir. Bu olmadan elimizde yalnızca ağ verisi olur. |
ip | string | İsteğe bağlı | Kullanıcının IP'si. Yalnızca request_id'niz yoksa gerekir, örneğin postback'lerde. |
email | string | İsteğe bağlı | Hash olarak saklanır. Tek kullanımlık alan adlarını ve hesaplar arasında paylaşılan e-postaları tespit eder. |
payout_address | string | İsteğe bağlı | Paranın gittiği PayPal e-postası, cüzdan veya hesap. Hash olarak saklanır. |
payout_method | string | İsteğe bağlı | paypal, usdt veya giftcard gibi serbest metin. |
amount | number | İsteğe bağlı | Cashout veya dönüşüm tutarı. |
currency | string | İsteğe bağlı | Para birimi kodu, örneğin USD. Cashout'lar için varsayılan USD. |
offer_id | string | İsteğe bağlı | Offer ID'si, offer_click ve conversion için. Offer hızı hesabında kullanılır. |
offer_country | string | İsteğe bağlı | Teklifin ödeme yaptığı ülke (ISO kodu, ör. US), dönüşümlerde. Başka ülkedeki kullanıcı işaretlenir. |
geo_country | string | İsteğe bağlı | Kullanıcı IP'sinin kendi konum veriniz (ISO kodu). Bizimkiyle uyuşmazsa IP muhtemelen bir proxy çıkışıdır. |
transaction_id | string | İsteğe bağlı | Bir dönüşümün ağ tarafındaki işlem ID'si. Mükerrerleri yakalamak için kullanılır. |
offer_name | string | İsteğe bağlı | Kullanıcılarınızın gördüğü teklif başlığı. Panelde ham kimlik yerine her yerde gösterilir. |
click_id | string | İsteğe bağlı | Tıklama kimliğiniz. Bağlanmaları için offer_click ve dönüşümde aynı değeri gönderin. |
source | string | İsteğe bağlı | Olayın kaynağı, örneğin offerwall veya ağ adı. |
meta | object | İsteğe bağlı | Olayla birlikte saklanan en fazla 20 ek metin alanı (örneğin sub kimlikleri). |
Yanıt
Yanıt her zaman aynı yapıdadır. Geçerli olmayan alanlar null olur.
score0 ile 100 arasındadır. Nedenler birleştirilir; böylece birkaç orta düzey sinyal 100'ü aşmadan toplanır.reasonstetiklenen her sinyali, en güçlüden başlayarak ağırlığı, ayrıntıları ve olduğu gibi gösterebileceğiniz sade İngilizce bir etiketle listeler.device.confidencecihazın ne kadar benzersiz göründüğünü söyler. Fingerprint'ler taklit edilebilir, bu yüzden asla kesinlik iddia etmeyiz.linked_accountsbu hesapla aynı cihazı, ödeme adresini veya e-postayı paylaşan diğer hesapları listeler.cashoutyalnızca cashout olaylarında doldurulur ve inceleme kuyruğunuzdaki durumu gösterir.
Kararlar ve action
decision alanına göre değil, action alanına göre hareket edin. Aşağıdaki eşikler varsayılandır ve panelden site bazında değiştirilebilir.
| Karar | Skor (varsayılan) | shadow'da action | enforce'ta action | Ne yapmalı |
|---|---|---|---|---|
allow | 0-49 | allow | allow | Normal şekilde devam edin. |
review | 50-79 | allow | review | Cashout'u bekletin veya ek doğrulama isteyin. İnceleme kuyruğunuzda görünür. |
block | 80-100 | allow | block | İşlemi durdurun. Bakiyeyi dondurun veya kaydı reddedin. |
Shadow modunda action her zaman allow olur, bu yüzden aynı kodu enforce'a geçmeden önce güvenle yayına alabilirsiniz. Enforce'a geçtiğinizde kodunuzda hiçbir şey değişmez.
Olay türleri
Elinizdeki olayları gönderin. En önemlileri signup ve cashout; conversion olayları offer hızı kontrollerini besler.
| Olay | Ne zaman gönderilir | Neyi yakalar |
|---|---|---|
signup | Hesap oluşturulduğunda | Çoklu hesaplar, botlar, VPN ile kayıtlar, tek kullanımlık e-postalar |
login | Başarılı giriş | Hesap paylaşımı, ülke değişiklikleri, yeni cihazlar |
offer_click | Kullanıcı bir offer açtığında | Offer hızı için sayacı başlatır |
conversion | Offerwall'dan veya ağdan gelen postback | Çok hızlı tamamlanan offer'lar, mükerrer işlemler, ani dönüşüm artışları |
cashout | Kullanıcı para çekme talep ettiğinde | Paylaşılan ödeme adresleri, cashout sıklığı, yeni hesaplardan cashout |
custom | Puanlanmasını istediğiniz diğer her şey | Cihaz ve ağ sinyalleri |
Offerwall'lar ve postback'ler
Offerwall dönüşümleri postback ile, sunucudan sunucuya, tarayıcı olmadan gelir. CashoutGuard her dönüşümü onu başlatan tıklamaya bağlar; böylece dönüşüm o tıklamanın cihazı ve ağıyla puanlanır.
1. Kullanıcı bir teklifi açtığında
Tarayıcıda toplayın ve teklif ile tıklama kimliğinizle bir offer_click gönderin.
2. Postback geldiğinde
Postback işleyicinizden aynı account_id ve click_id ile bir conversion gönderin. request_id gerekmez. Offerwall veriyorsa kullanıcının IP'sini de iletin.
Dönüşümler şunlar için kontrol edilir: teklif için fazla hızlı tamamlanma, tıklamasız dönüşüm, farklı ülkelerden tıklama ve dönüşüm, hesabın olağan gününün çok üstünde kazanç ve yinelenen işlem kimlikleri.
Offerwall ağları
Çok sayıda yayıncısı olan bir ağ işletiyorsanız, yayıncıyı içeren hesap kimlikleri gönderin ve Siteler bölümünde "Offerwall ağı modu"nu açın. Böylece hesaplar yalnızca aynı yayıncı içinde bağlanır, çünkü bir kişinin yayıncılarınızın birkaç sitesini kullanması normaldir. Biçim: publisher_id:user_id
Teklif kataloğu
POST /v1/offers teklif adlarınızı gönderir (çağrı başına en fazla 1.000). Geçmiş ve gelecek olaylar yalnızca kimlik taşısa bile gerçek adı gösterir.
Neden kodları
Bu kodlar reasons[].code içinde görünür. Metni moderatörlerinize gösterin; mantığınızda kodu kullanın.
| Kod | Anlamı | Grup | Ağırlık |
|---|---|---|---|
ip_tor | Tor çıkış düğümü | Ağ | 60 |
ip_vpn | VPN bağlantısı | Ağ | 45 |
ip_datacenter | Veri merkezi / hosting IP'si | Ağ | 40 |
timezone_mismatch | Tarayıcı saat dilimi IP konumuyla uyuşmuyor | Ağ | 20 |
webrtc_ip_leak | Gerçek IP başka bir ülkeden sızdı | Ağ | 30 |
ip_multi_timezone | Aynı IP'de çok sayıda farklı saat dilimi (proxy çıkışı) | Ağ | 50 |
proxy_farm_ip | Tek IP'de, hepsi aynı yabancı saate sahip birden çok hesap (paylaşılan proxy) | Ağ | 60 |
provider_rotation | Birkaç günde birçok internet sağlayıcısı, yabancı saatle (dönen konut proxy'si) | Ağ | 45 |
privacy_relay | iCloud Private Relay (gizlilik özelliği) | Ağ | 5 |
proxy_headers | İstek bir proxy üzerinden geldi | Ağ | 20 |
geo_sources_disagree | Konum kaynakları uyuşmuyor | Ağ | 45 |
ip_shared_with_accounts | Aynı IP bugün başka hesaplarca da kullanıldı | Ağ | 25 |
country_changed | Ülke değişti | Ağ | 15 |
impossible_travel | İmkânsız seyahat: birkaç saat içinde iki uzak ülkeden IP | Ağ | 50 |
locale_country_mismatch | Başka ülkenin tarayıcı dili | Ağ | 30 |
phone_country_mismatch | IP'den farklı ülkeden telefon | Ağ | 20 |
ip_flagged_on_network | IP başka sitelerde engellendi | Ağ | 25 |
device_shared_with_accounts | Cihaz başka hesaplarla ortak | Cihaz | 55 |
automation_detected | Bot veya otomasyon aracı | Cihaz | 70 |
auto_clicker | Telefonda otomatik tıklayıcı | Cihaz | 55 |
scripted_behavior | Sayfa betikle kullanıldı | Cihaz | 45 |
emulator_or_vm | Emülatör veya sanal makine | Cihaz | 45 |
browser_tampering | Tarayıcı manipülasyonu / sahtecilik | Cihaz | 35 |
device_rooted | Root'lu telefon | Cihaz | 25 |
incognito | Gizli tarama | Cihaz | 10 |
device_spoofed | Sahte telefon modeli | Cihaz | 55 |
emulator_profile | Emülatör varsayılan profili | Cihaz | 60 |
cloud_phone | Bulut telefon | Cihaz | 60 |
phone_farm_display | Telefon çiftliği ekranı | Cihaz | 45 |
device_market_mismatch | Yurt dışında yalnızca Çin'e özel telefon | Cihaz | 25 |
storage_cleared_reappeared | Çerezleri silip geri döndü | Cihaz | 15 |
no_device_data | Cihaz verisi gönderilmedi | Cihaz | 15 |
request_reused | Cihaz token'ı başka bir hesapça tekrar kullanıldı | Cihaz | 40 |
device_farm_proxy | Konut proxyli telefon çiftliği | Cihaz | 85 |
device_clones | Cihaz klonları: tek bir ağda birçok yeni hesap gibi görünmek için kimliğini sıfırlayan bir telefon | Cihaz | 55 |
payout_address_shared | Ödeme adresi başka hesaplarca kullanılıyor | Hesap | 70 |
email_disposable | Tek kullanımlık e-posta | Hesap | 25 |
email_invalid | E-posta alamayan adres (böyle bir e-posta alan adı yok) | Hesap | 35 |
email_shared | Başka bir hesapla aynı e-posta | Hesap | 50 |
phone_shared | Telefon başka hesaplarla ortak | Hesap | 50 |
phone_voip | VoIP veya sanal numara | Hesap | 40 |
phone_invalid | Geçersiz telefon numarası | Hesap | 30 |
many_devices_per_account | Tek hesapta çok fazla cihaz | Hesap | 20 |
flagged_on_network | CashoutGuard korumalı başka sitelerde işaretlendi | Hesap | 45 |
face_same_person | Diğer hesaplarla aynı yüz | Hesap | 0 |
offer_completed_too_fast | Offer imkânsız bir hızda tamamlandı | Davranış | 40 |
slow_after_click | Tıklamadan çok sonra dönüştü | Davranış | 0 |
conversion_velocity | Saatte çok fazla dönüşüm | Davranış | 30 |
conversion_without_click | Offerwall'unuzdan tıklama olmadan dönüşüm | Davranış | 35 |
click_conversion_country_mismatch | Bir ülkede tıklandı, başka bir ülkede dönüştü | Davranış | 30 |
offer_country_mismatch | Teklif ülkesi kullanıcınınkinden farklı | Davranış | 45 |
click_velocity | Birkaç dakikada çok fazla offer tıklaması | Davranış | 35 |
earnings_spike | Kazanç normal kullanıcının çok üzerinde | Davranış | 30 |
source_high_reversals | Çok ters ibraz alan kaynak | Davranış | 45 |
offer_high_reversals | Çok ters ibraz alan teklif | Davranış | 35 |
duplicate_transaction | Mükerrer işlem ID'si | Davranış | 60 |
offer_repeated_other_publisher | Aynı teklif başka bir yayıncı üzerinden zaten yapılmış | Davranış | 85 |
offer_repeated_other_account | Aynı teklif bu cihazda başka bir hesapla zaten yapılmış | Davranış | 85 |
offer_farm_burst | Çiftlik dalgası: saatler içinde bu teklifte çiftlik cihazlı çok sayıda yeni hesap | Davranış | 30 |
signup_burst | Kayıt patlaması: birkaç hesap farklı IP'lerden saniyeler içinde kaydoldu | Davranış | 25 |
face_check_required | Yüz kontrolü gerekli, henüz yapılmadı | Davranış | 0 |
face_check_failed | Yüz kontrolü başarısız | Davranış | 0 |
publisher_farm_wave | Yayıncısının çiftlik dalgası: bu teklife gönderdiği yeni hesapların çoğu bulut telefonlardan veya emülatörlerden geldi | Davranış | 55 |
cashout_velocity | Günde çok fazla cashout | Davranış | 30 |
new_account_cashout | Yepyeni bir hesaptan cashout | Davranış | 20 |
blocklisted | Engel listenizde | Listeleriniz | 100 |
Ağırlıklar noisy-OR ile birleştirilir: score = 100 x (1 - (1 - weight/100) çarpımı). 40'lık iki sinyal 80 değil, 64 verir. Engel listesi eşleşmesi her zaman 100 verir.
Webhook'lar
Panelde bir webhook URL’si ayarlayın. block olarak puanlanan her olay (event.blocked), bir hesap block’a geçtiğinde (account.blocked) ve ekibiniz bir çekim kararı verdiğinde (cashout.decided) POST gönderiyoruz. Kullanmadığınız türleri yok sayın.
Her istek webhook secret'ınızla imzalanır. Ham gövdenin hex formatındaki HMAC-SHA256 değeri şu header'dadır: X-CashoutGuard-Signature
Herhangi bir 2xx durum koduyla yanıt verin. Başarısız gönderimler en fazla 5 kez yeniden denenir: 10 saniye, 1 dakika, 5 dakika ve 15 dakika sonra.
Hesap durumu
GET /v1/accounts/{account_id} olay oluşturmadan bir hesabın güncel risk görünümünü döndürür.
POST /v1/accounts/{account_id}/status kendi moderasyon araçlarınızın bir hesabın durumunu değiştirmesini sağlar.
active: Normal puanlama.allowlisted: Skorlar inceleme eşiğinin altında sınırlanır. Güvenilir kullanıcılar ve ekip üyeleri için.blocked: Her olay 100 skorla block döndürür.
İptaller ve doğruluk
POST /v1/outcomes puanladıktan sonra dönüşümlere ne olduğunu bildirir: offerwall veya reklamveren tarafından iptal edildi (chargeback) ya da geçerli onaylandı. Kimliklerinizi eşleştirip motoru Doğruluk sayfasında kendi trafiğinizde ölçeriz.
Kodsuz: offerwall'larınızın aylık iptal dosyasını (CSV veya Excel) Doğruluk sayfasına yükleyin. Kimlik sütununu otomatik buluruz.
PHP, Node.js, Python, Android
SDK gerekmez. Kısa zaman aşımlı sade bir HTTP çağrısı yeterli. Tam cashout örneği:
- cashoutguard.php: PHP 7.4+, tek dosya, Composer yok. require edip kullanın.
- composer require cashoutguard/cashoutguard-php: aynı PHP istemcisi README ile, vendor klasörünüz için.
- npm install @cashoutguard/node: Node 18+, TypeScript tipleriyle.
- cashoutguard-wordpress.zip: WordPress eklentisi: her sayfada tarayıcı betiği, puanlanan kayıt ve girişler, ayrıca para çekme, offerwall dönüşümleri ve iptaller için hook'lar.
Hatalar ve limitler
| HTTP | Gövde | Anlamı |
|---|---|---|
| 401 | missing_or_invalid_secret_key | Secret key eksik, yanlış veya iptal edilmiş. Yanıt nedenini "reason" (missing, public_key, unknown_secret, placeholder, malformed), çözümünü "hint" alanında verir. |
| 404 | not_found | Hesap bulunamadı (hesap endpoint'leri). |
| 422 | { "message", "errors" } | Geçersiz gövde. errors her alanı listeler. |
| 429 | Too Many Requests | İstek limitine ulaşıldı. Sunucu API'si site başına dakikada 3.000 isteğe izin verir. |
| 401 · agent.js | unknown_public_key | data-key hiçbir sitenin açık anahtarı değil. pk_live_... anahtarını Kurulum'dan yeniden kopyalayın. |
| 403 · agent.js | origin_not_allowed | Sayfanın alan adı sitenin izin verilen kaynaklarında yok. Siteler bölümünden ekleyin veya listeyi boş bırakın. localhost her zaman çalışır. agent.js bunu tarayıcı konsolunda da açıklar. Uygulama WebView'ları "null" origin gönderir: kabul etmek için listeye null ekleyin. Yerel Android SDK için bir şey gerekmez. |
| 403 | account_suspended | Hesap askıya alındı, genellikle ödenmemiş bir fatura nedeniyle. Faturalandırmayı kontrol edin. |
| 503 | temporarily_unavailable | Bizim tarafımızda kısa bir kesinti. İşleme izin verin ve daha sonra tekrar deneyin. |
Fail open: çağrı zaman aşımına uğrarsa veya hata verirse işleme izin verin ve kaydını tutun. Bizim tarafımızdaki bir kesinti kullanıcılarınızı asla durdurmasın.