CashoutGuard

دستاویزات

براؤزر میں ایک اسکرپٹ، سرور سے ایک API کال۔ لائیو ہونے کے لیے جو کچھ چاہیے، ایک ہی پیج پر۔

کوئیک اسٹارٹ

براؤزر کے لیے آپ کو اپنی پبلک کی (pk_...) اور سرور کے لیے اپنی سیکرٹ کی (sk_...) درکار ہے۔ دونوں ڈیش بورڈ میں Sites and keys کے تحت موجود ہیں۔

1. اسکرپٹ لگائیں

یہ ٹیگ ان پیجز پر لگائیں جہاں صارفین سائن اپ، لاگ اِن، آفرز پر کلک یا کیش آؤٹ کی درخواست کرتے ہیں۔ یہ خود کو یہاں سے initialise کرتا ہے: data-key

<script src="https://cashoutguard.com/v1/agent.js" data-key="pk_live_YOUR_PUBLIC_KEY" async></script>

2. collect کریں اور request_id اپنے سرور کو بھیجیں

اہم لمحے پر ایونٹ کے نام کے ساتھ collect() کال کریں۔ یہ اس ویلیو پر resolve ہوتا ہے: { request_id, visitor_id }

const { request_id } = await CashoutGuard.collect({ event: 'cashout' });

collect() کبھی reject نہیں ہوتا۔ ناکامی کی صورت میں (بلاک، آف لائن، ٹائم آؤٹ) یہ request_id: null اور ایک ایرر اسٹرنگ کے ساتھ resolve ہوتا ہے۔ فارم پھر بھی بھیجیں اور فیصلہ اپنے سرور پر چھوڑ دیں۔

3. اپنے سرور سے فیصلہ مانگیں

ایونٹ کو /v1/evaluate پر POST کریں، اور اپنی سیکرٹ کی اس ہیڈر میں رکھیں: Authorization: Bearer sk_live_...

سیکرٹ کی کبھی بھی براؤزر کوڈ یا موبائل ایپ میں نہ رکھیں۔ صرف آپ کا سرور ہی /v1/evaluate کال کرے۔

Evaluate ریکوئسٹ

POST https://cashoutguard.com/v1/evaluate ایک اکاؤنٹ کے ایک ایونٹ کو اسکور کرتا ہے، اسے اس کی ڈیوائس، نیٹ ورک اور پے آؤٹ ایڈریس سے جوڑتا ہے، اور فیصلہ واپس کرتا ہے۔ JSON بھیجیں۔

فیلڈقسملازمیتفصیل
eventstringلازمیsignup، login، offer_click، conversion، cashout یا custom۔
account_idstringلازمیآپ کی یوزر ID، زیادہ سے زیادہ 191 حروف۔ ای میل نہیں، کوئی مبہم ID استعمال کریں۔
request_idstringاختیاریبراؤزر میں collect() سے حاصل ہوتی ہے۔ 1 گھنٹے کے لیے درست۔ اس کے بغیر ہمارے پاس صرف نیٹ ورک ڈیٹا ہوتا ہے۔
ipstringاختیاریصارف کا IP۔ صرف تب ضروری ہے جب آپ کے پاس request_id نہ ہو، مثلاً postbacks کے لیے۔
emailstringاختیاریہیش کی صورت میں محفوظ۔ عارضی ڈومینز اور اکاؤنٹس کے درمیان مشترک ای میلز پکڑتا ہے۔
payout_addressstringاختیاریPayPal ای میل، والٹ یا وہ اکاؤنٹ جس میں پیسہ جاتا ہے۔ ہیش کی صورت میں محفوظ۔
payout_methodstringاختیاریآزاد متن، جیسے paypal، usdt یا giftcard۔
amountnumberاختیاریکیش آؤٹ یا کنورژن کی رقم۔
currencystringاختیاریکرنسی کوڈ، مثلاً USD۔ کیش آؤٹس کے لیے ڈیفالٹ USD۔
offer_idstringاختیاریآفر ID، offer_click اور conversion کے لیے۔ آفر کی رفتار کے لیے استعمال ہوتی ہے۔
offer_countrystringاختیاریوہ ملک جس کے لیے آفر ادائیگی کرتی ہے (ISO کوڈ، جیسے US)، کنورژنز پر۔ دوسرے ملک کا صارف نشان زد ہوتا ہے۔
geo_countrystringاختیاریصارف کے IP کی آپ کی اپنی جیولوکیشن (ISO کوڈ)۔ ہماری سے مختلف ہو تو IP غالباً پراکسی ایگزٹ ہے۔
transaction_idstringاختیاریکنورژن کی نیٹ ورک ٹرانزیکشن ID۔ ڈپلیکیٹس پکڑنے کے لیے استعمال ہوتی ہے۔
offer_namestringاختیاریآفر کا عنوان جیسا آپ کے صارفین دیکھتے ہیں۔ ڈیش بورڈ میں ID کی جگہ یہی دکھتا ہے۔
click_idstringاختیاریآپ کی کلک ID۔ offer_click اور کنورژن دونوں میں ایک ہی قدر بھیجیں تاکہ وہ جڑ جائیں۔
sourcestringاختیاریایونٹ کہاں سے آیا، جیسے آفر وال یا نیٹ ورک کا نام۔
metaobjectاختیاریایونٹ کے ساتھ محفوظ ہونے والے 20 تک اضافی ٹیکسٹ فیلڈز (جیسے sub IDs)۔

ریسپانس

ریسپانس کی ساخت ہمیشہ ایک جیسی ہوتی ہے۔ جو فیلڈز لاگو نہ ہوں وہ null ہوتی ہیں۔

  • score 0 سے 100 تک ہوتا ہے۔ وجوہات اس طرح جوڑی جاتی ہیں کہ کئی درمیانے سگنلز مل کر بڑھتے ہیں مگر 100 سے آگے نہیں جاتے۔
  • reasons ہر فعال سگنل کی فہرست دیتا ہے، سب سے مضبوط پہلے، اس کے وزن، تفصیلات اور براہِ راست دکھانے کے قابل سادہ انگریزی لیبل کے ساتھ۔
  • device.confidence بتاتا ہے کہ ڈیوائس کتنی منفرد لگتی ہے۔ فنگر پرنٹس اسپوف ہو سکتے ہیں، اس لیے ہم کبھی سو فیصد یقین کا دعویٰ نہیں کرتے۔
  • linked_accounts ان دوسرے اکاؤنٹس کی فہرست دیتا ہے جو اس اکاؤنٹ کے ساتھ ڈیوائس، پے آؤٹ ایڈریس یا ای میل شیئر کرتے ہیں۔
  • cashout صرف cashout ایونٹس کے لیے سیٹ ہوتا ہے اور آپ کی ریویو قطار میں اسٹیٹس بتاتا ہے۔

فیصلے اور ایکشنز

decision پر نہیں، action فیلڈ پر عمل کریں۔ نیچے دی گئی حدیں ڈیفالٹ ہیں اور ڈیش بورڈ میں ہر سائٹ کے لیے بدلی جا سکتی ہیں۔

فیصلہاسکور (ڈیفالٹ)شیڈو میں actionenforce میں actionکیا کریں
allow0-49allowallowمعمول کے مطابق جاری رکھیں۔
review50-79allowreviewکیش آؤٹ روکیں یا اضافی تصدیق مانگیں۔ یہ آپ کی ریویو قطار میں نظر آتا ہے۔
block80-100allowblockایکشن روک دیں۔ بیلنس فریز کریں یا سائن اپ مسترد کریں۔

شیڈو موڈ میں action ہمیشہ allow ہوتا ہے، اس لیے enforce سے پہلے یہی کوڈ بے فکری سے لائیو کیا جا سکتا ہے۔ enforce پر جانے سے آپ کے کوڈ میں کچھ نہیں بدلتا۔

ایونٹ کی اقسام

جو ایونٹس آپ کے پاس ہیں وہ بھیجیں۔ سائن اپ اور کیش آؤٹ سب سے اہم ہیں؛ کنورژنز سے آفر کی رفتار کے چیکس چلتے ہیں۔

ایونٹکب بھیجیںکیا پکڑتا ہے
signupاکاؤنٹ بن گیاملٹی اکاؤنٹس، بوٹس، VPN سائن اپس، عارضی ای میلز
loginکامیاب لاگ اِناکاؤنٹ شیئرنگ، ملک کی تبدیلی، نئی ڈیوائسز
offer_clickصارف کوئی آفر کھولتا ہےآفر کی رفتار کے لیے ٹائمر شروع کرتا ہے
conversionofferwall یا نیٹ ورک سے postbackبہت تیزی سے مکمل آفرز، ڈپلیکیٹ ٹرانزیکشنز، کنورژنز کی بوچھاڑ
cashoutصارف رقم نکلوانے کی درخواست کرتا ہےمشترک پے آؤٹ ایڈریسز، کیش آؤٹ ویلاسٹی، نئے اکاؤنٹس کے کیش آؤٹس
customکوئی بھی اور چیز جسے آپ اسکور کرانا چاہیںڈیوائس اور نیٹ ورک سگنلز

آفر والز اور پوسٹ بیکس

آفر وال کنورژنز پوسٹ بیک کے ذریعے سرور سے سرور، بغیر براؤزر کے آتی ہیں۔ CashoutGuard ہر کنورژن کو اس کلک سے جوڑتا ہے جس سے وہ شروع ہوئی، اس لیے اس کا اسکور اسی کلک کی ڈیوائس اور نیٹ ورک سے بنتا ہے۔

1. جب صارف کوئی آفر کھولے

براؤزر میں کلیکٹ کریں اور آفر اور اپنی کلک ID کے ساتھ offer_click بھیجیں۔

2. جب پوسٹ بیک آئے

اپنے پوسٹ بیک ہینڈلر سے اسی account_id اور click_id کے ساتھ conversion بھیجیں۔ request_id کی ضرورت نہیں۔ اگر آفر وال صارف کا IP دے تو وہ بھی بھیجیں۔

کنورژنز کی جانچ ہوتی ہے: آفر کے لیے بہت تیزی سے مکمل ہونا، بغیر کلک کے کنورژن، کلک اور کنورژن مختلف ممالک سے، اکاؤنٹ کے عام دن سے کہیں زیادہ کمائی، اور ڈپلیکیٹ ٹرانزیکشن IDs۔

آفر وال نیٹ ورکس

اگر آپ کئی پبلشرز والا نیٹ ورک چلاتے ہیں تو پبلشر سمیت اکاؤنٹ IDs بھیجیں اور Sites میں "آفر وال نیٹ ورک موڈ" آن کریں۔ پھر اکاؤنٹس صرف ایک ہی پبلشر کے اندر جڑتے ہیں، کیونکہ ایک شخص کا کئی پبلشرز کی سائٹس استعمال کرنا معمول ہے۔ فارمیٹ: publisher_id:user_id

آفر کیٹلاگ

POST /v1/offers آپ کی آفرز کے نام بھیجتا ہے (ہر کال میں 1,000 تک)۔ پرانے اور نئے ایونٹس اصل نام دکھائیں گے، چاہے ان میں صرف ID ہو۔

ریزن کوڈز

یہ کوڈز reasons[].code میں آتے ہیں۔ متن اپنے ماڈریٹرز کو دکھائیں؛ اپنی لاجک میں کوڈ استعمال کریں۔

کوڈمطلبگروپوزن
ip_torTor ایگزٹ نوڈنیٹ ورک60
ip_vpnVPN کنکشننیٹ ورک45
ip_datacenterڈیٹا سینٹر / ہوسٹنگ IPنیٹ ورک40
timezone_mismatchبراؤزر کا ٹائم زون IP کی لوکیشن سے میل نہیں کھاتانیٹ ورک20
webrtc_ip_leakاصل IP کسی دوسرے ملک میں لیک ہوانیٹ ورک30
ip_multi_timezoneایک ہی IP پر کئی مختلف ٹائم زونز (پراکسی ایگزٹ)نیٹ ورک50
proxy_farm_ipایک IP پر کئی اکاؤنٹس، سب کی ایک ہی غیر ملکی گھڑی (مشترکہ پراکسی)نیٹ ورک60
provider_rotationچند دنوں میں کئی انٹرنیٹ فراہم کنندگان، غیر ملکی گھڑی کے ساتھ (گھومنے والی رہائشی پراکسی)نیٹ ورک45
privacy_relayiCloud Private Relay (پرائیویسی فیچر)نیٹ ورک5
proxy_headersدرخواست پراکسی کے ذریعے آئینیٹ ورک20
geo_sources_disagreeجیولوکیشن ذرائع میں اختلافنیٹ ورک45
ip_shared_with_accountsآج یہی IP دوسرے اکاؤنٹس نے بھی استعمال کیانیٹ ورک25
country_changedملک بدل گیانیٹ ورک15
impossible_travelناممکن سفر: چند گھنٹوں میں دو دور دراز ممالک کے IPنیٹ ورک50
locale_country_mismatchدوسرے ملک کی براؤزر زباننیٹ ورک30
phone_country_mismatchIP سے مختلف ملک کا فوننیٹ ورک20
ip_flagged_on_networkدوسری ویب سائٹس پر بلاک IPنیٹ ورک25
device_shared_with_accountsڈیوائس دوسرے اکاؤنٹس کے ساتھ مشترک ہےڈیوائس55
automation_detectedبوٹ یا آٹومیشن ٹولڈیوائس70
auto_clickerفون پر آٹو کلکرڈیوائس55
scripted_behaviorاسکرپٹ سے صفحے کا استعمالڈیوائس45
emulator_or_vmایمولیٹر یا ورچوئل مشینڈیوائس45
browser_tamperingبراؤزر میں چھیڑ چھاڑ / اسپوفنگڈیوائس35
device_rootedروٹ شدہ فونڈیوائس25
incognitoپرائیویٹ براؤزنگڈیوائس10
device_spoofedجعلی فون ماڈلڈیوائس55
emulator_profileایمولیٹر کا ڈیفالٹ پروفائلڈیوائس60
cloud_phoneکلاؤڈ فونڈیوائس60
phone_farm_displayفون فارم ڈسپلےڈیوائس45
device_market_mismatchصرف چین والا فون بیرونِ ملکڈیوائس25
storage_cleared_reappearedکوکیز صاف کر کے دوبارہ آیاڈیوائس15
no_device_dataڈیوائس ڈیٹا نہیں بھیجا گیاڈیوائس15
request_reusedڈیوائس ٹوکن کسی دوسرے اکاؤنٹ نے دوبارہ استعمال کیاڈیوائس40
device_farm_proxyریزیڈنشل پراکسی پر فون فارمڈیوائس85
device_clonesڈیوائس کلون: ایک فون اپنی شناخت ری سیٹ کر کے ایک نیٹ ورک پر بہت سے نئے اکاؤنٹس بن رہا ہےڈیوائس55
payout_address_sharedپے آؤٹ ایڈریس دوسرے اکاؤنٹس بھی استعمال کر رہے ہیںاکاؤنٹ70
email_disposableعارضی ای میلاکاؤنٹ25
email_invalidایسا ای میل جس پر میل نہیں آ سکتی (ایسا کوئی میل ڈومین نہیں)اکاؤنٹ35
email_sharedکسی دوسرے اکاؤنٹ والی ای میلاکاؤنٹ50
phone_sharedدوسرے اکاؤنٹس کے ساتھ مشترک فون نمبراکاؤنٹ50
phone_voipVoIP یا ورچوئل نمبراکاؤنٹ40
phone_invalidغلط فون نمبراکاؤنٹ30
many_devices_per_accountایک اکاؤنٹ پر بہت زیادہ ڈیوائسزاکاؤنٹ20
flagged_on_networkCashoutGuard سے محفوظ دوسری ویب سائٹس پر نشان زداکاؤنٹ45
face_same_personدوسرے اکاؤنٹس جیسا ہی چہرہاکاؤنٹ0
offer_completed_too_fastآفر ناممکن حد تک تیزی سے مکمل ہوئیرویہ40
slow_after_clickکلک کے کافی دیر بعد کنورژنرویہ0
conversion_velocityفی گھنٹہ بہت زیادہ کنورژنزرویہ30
conversion_without_clickآپ کی وال سے کلک کے بغیر کنورژنرویہ35
click_conversion_country_mismatchایک ملک میں کلک، دوسرے میں کنورژنرویہ30
offer_country_mismatchآفر کا ملک صارف کے ملک سے مختلفرویہ45
click_velocityچند منٹوں میں بہت زیادہ آفر کلکسرویہ35
earnings_spikeعام صارف سے کہیں زیادہ کمائیرویہ30
source_high_reversalsزیادہ چارج بیک والا سورسرویہ45
offer_high_reversalsزیادہ چارج بیک والی آفررویہ35
duplicate_transactionڈپلیکیٹ ٹرانزیکشن IDرویہ60
offer_repeated_other_publisherیہی آفر پہلے کسی دوسرے پبلشر کے ذریعے کی جا چکی ہےرویہ85
offer_repeated_other_accountیہی آفر اس ڈیوائس پر دوسرے اکاؤنٹ سے پہلے ہی کی گئیرویہ85
offer_farm_burstفارم کی لہر: چند گھنٹوں میں اس آفر پر فارم ڈیوائسز والے بہت سے نئے اکاؤنٹسرویہ30
signup_burstسائن اپ کی بوچھاڑ: کئی اکاؤنٹس مختلف IP سے چند سیکنڈ میں بنےرویہ25
face_check_requiredچہرے کی جانچ ضروری ہے، ابھی نہیں ہوئیرویہ0
face_check_failedچہرے کی جانچ ناکامرویہ0
publisher_farm_waveاس کے پبلشر کی فارم لہر: اس آفر پر بھیجے گئے زیادہ تر نئے اکاؤنٹس کلاؤڈ فونز یا ایمولیٹرز سے آئےرویہ55
cashout_velocityروزانہ بہت زیادہ کیش آؤٹسرویہ30
new_account_cashoutبالکل نئے اکاؤنٹ سے کیش آؤٹرویہ20
blocklistedآپ کی بلاک لسٹ میں ہےآپ کی لسٹس100

وزن noisy-OR سے جوڑے جاتے ہیں: score = 100 x (1 - product of (1 - weight/100))۔ 40 کے دو سگنلز 64 دیتے ہیں، 80 نہیں۔ بلاک لسٹ میچ ہمیشہ 100 دیتا ہے۔

Webhooks

ڈیش بورڈ میں ویب ہک URL سیٹ کریں۔ block اسکور والے ہر ایونٹ (event.blocked)، کسی اکاؤنٹ کے block ہونے (account.blocked) اور آپ کی ٹیم کے کیش آؤٹ فیصلے (cashout.decided) پر ہم POST بھیجتے ہیں۔ جو ٹائپ استعمال نہ کریں انہیں نظر انداز کریں۔

ہر ریکوئسٹ آپ کے webhook سیکرٹ سے سائن ہوتی ہے۔ raw باڈی کا hex HMAC-SHA256 اس ہیڈر میں ہوتا ہے: X-CashoutGuard-Signature

کسی بھی 2xx اسٹیٹس کے ساتھ جواب دیں۔ ناکام ڈیلیوریز 5 بار تک دوبارہ بھیجی جاتی ہیں: 10 سیکنڈ، 1 منٹ، 5 منٹ اور 15 منٹ بعد۔

اکاؤنٹ اسٹیٹس

GET /v1/accounts/{account_id} کوئی ایونٹ بنائے بغیر اکاؤنٹ کا موجودہ رسک ویو واپس کرتا ہے۔

POST /v1/accounts/{account_id}/status آپ کے اپنے ماڈریشن ٹولز کو اکاؤنٹ کا اسٹیٹس بدلنے دیتا ہے۔

  • active: معمول کی اسکورنگ۔
  • allowlisted: اسکورز review کی حد سے نیچے محدود رہتے ہیں۔ بھروسہ مند صارفین اور اسٹاف کے لیے۔
  • blocked: ہر ایونٹ اسکور 100 کے ساتھ block واپس کرتا ہے۔

ریورسلز اور درستگی

POST /v1/outcomes بتاتا ہے کہ اسکور کے بعد کنورژنز کا کیا ہوا: آفر وال یا ایڈورٹائزر نے ریورس کیا (chargeback) یا درست قرار دیا۔ ہم آپ کے ids ملا کر Accuracy صفحے پر آپ کی ٹریفک پر انجن ناپتے ہیں۔

بغیر کوڈ کے: Accuracy صفحے پر اپنی آفر والز کی ماہانہ ریورسل فائل (CSV یا Excel) اپ لوڈ کریں۔ id کالم ہم خود ڈھونڈ لیتے ہیں۔

PHP، Node.js، Python، Android

کسی SDK کی ضرورت نہیں۔ مختصر ٹائم آؤٹ کے ساتھ ایک سادہ HTTP کال کافی ہے۔ کیش آؤٹ کی مکمل مثال:

ایررز اور حدود

HTTPباڈیمطلب
401missing_or_invalid_secret_keyسیکرٹ کی موجود نہیں، غلط ہے یا منسوخ ہو چکی ہے۔ جواب میں وجہ "reason" (missing، public_key، unknown_secret، placeholder، malformed) میں اور حل "hint" میں ہوتا ہے۔
404not_foundاکاؤنٹ نہیں ملا (اکاؤنٹ اینڈ پوائنٹس)۔
422{ "message", "errors" }باڈی درست نہیں۔ errors میں ہر فیلڈ کی تفصیل ہوتی ہے۔
429Too Many Requestsریٹ لمٹ پوری ہو گئی۔ سرور API فی سائٹ فی منٹ 3,000 ریکوئسٹس کی اجازت دیتی ہے۔
401 · agent.jsunknown_public_keydata-key کسی سائٹ کی پبلک کی نہیں ہے۔ Install سے pk_live_... دوبارہ کاپی کریں۔
403 · agent.jsorigin_not_allowedصفحے کا ڈومین سائٹ کے allowed origins میں نہیں ہے۔ Sites میں شامل کریں یا فہرست خالی چھوڑ دیں۔ localhost ہمیشہ چلتا ہے۔ agent.js براؤزر کنسول میں بھی یہ بتاتا ہے۔ ایپس کے WebView اوریجن "null" بھیجتے ہیں: انہیں قبول کرنے کے لیے فہرست میں null شامل کریں۔ نیٹو Android SDK کو کچھ نہیں چاہیے۔
403account_suspendedاکاؤنٹ معطل ہے، عموماً بقایا بل کی وجہ سے۔ Billing دیکھیں۔
503temporarily_unavailableہماری طرف مختصر خلل۔ ایکشن ہونے دیں اور بعد میں دوبارہ کوشش کریں۔

Fail open: اگر کال ٹائم آؤٹ ہو یا ایرر آئے تو ایکشن کی اجازت دیں اور اسے لاگ کریں۔ ہماری سروس بند ہونے سے آپ کے صارفین کبھی نہ رکیں۔