اگر آپ کا بوٹ پہلے سے Binance USD-M Futures کی زبان بولتا ہے، تو صرف ایک بیس یو آر ایل تبدیل کریں اور BuyCrypt پر لائیو ہو جائیں۔ ہمارے صارفین لیڈر بورڈ میں آپ کا بوٹ دریافت کرتے ہیں، اسے مفت $1,000 ڈیمو اکاؤنٹ پر آزماتے ہیں، اور قائل ہونے پر ریئل کیز پر منتقل ہو جاتے ہیں۔
کوئی کوڈ دوبارہ لکھنے کی ضرورت نہیں۔ کوئی ایکسچینج مخصوص پیچیدگیاں نہیں۔ وہی HMAC-SHA256 دستخط، وہی WebSocket یوزر ڈیٹا اسٹریم، وہی آرڈر کی اقسام — ہمارے ڈیمو ٹریڈنگ انجن پر لپٹا ہوا تاکہ صارفین اپنے سرمائے کو خطرے میں ڈالے بغیر بوٹس کا موازنہ کر سکیں۔
ہر صارف جو سبسکرائب کرتا ہے اسے $1,000 ورچوئل بیلنس کے ساتھ اپنا ذاتی ڈیمو اکاؤنٹ ملتا ہے۔ آپ کا بوٹ اس پر ٹریڈ کرتا ہے۔ وہ لائیو PnL، ڈرا ڈاؤن، اور ون ریٹ دیکھتے ہیں۔ ان کے حقیقی سرمائے کو کوئی خطرہ نہیں — اور آپ کے لیے کوئی ایکویزیشن لاگت نہیں۔
آپ کے بوٹ کا اپنا ڈیمو اکاؤنٹ 🤖 БОТ بیج کے ساتھ عوامی لیڈر بورڈ میں ظاہر ہوتا ہے۔ صارفین حقیقی ٹریڈرز میں PnL رینکنگ دیکھتے ہیں۔ صف پر ٹیپ کریں، "Connect" پر دبائیں — فوری سبسکرپشن۔
اگر آپ کا بوٹ کوئی بھی Binance Futures SDK استعمال کرتا ہے (binance-connector-python, python-binance, CCXT, وغیرہ)، تو اس کا base_url کو https://api.buycrypt.com/fapi کی طرف موجہ کریں۔ HMAC، recvWindow، آرڈر کی اقسام — بالکل ایک جیسا۔
جب کوئی صارف سبسکرائب کرتا ہے، ہم تازہ بنائی گئی API key + secret آپ کے webhook یو آر ایل پر POST کرتے ہیں — HMAC-دستخط شدہ، ناکامی کی صورت میں exponential backoff کے ساتھ دوبارہ کوشش، dead-letter سے بحال کیے جانے کے قابل۔ آپ کو کبھی بھی صارف سے کریڈینشلز مانگنے کی ضرورت نہیں۔
صارف لیڈر بورڈ کھولتا ہے۔ آپ کے بوٹ کا اکاؤنٹ صارف نام کے ساتھ 🤖 БОТ چپ، اور سبسکرائبرز کی تعداد کے ساتھ ظاہر ہوتا ہے۔ وہ صف پر ٹیپ کرتے ہیں۔
بوٹ کے پروفائل صفحے پر وہ "Connect to demo account" دیکھتے ہیں۔ ایک ٹیپ ان کے لیے نیا $1,000 ڈیمو بناتا ہے اور آپ کا بوٹ اس پر ٹریڈنگ شروع کر دیتا ہے۔
صارف بوٹ کو دنوں یا ہفتوں تک اپنے ڈیمو پر ٹریڈ کرتے دیکھتا ہے۔ PnL، پوزیشنز، ون ریٹ — سب ایپ میں لائیو۔ اگر انہیں یہ پسند آئے تو وہ ڈیمو سے پروڈکشن میں اپ گریڈ کرنے کے لیے BuyCrypt کے اندر اپنی حقیقی Binance API key درج کرتے ہیں۔
صارف BuyCrypt کے اندر اپنی حقیقی Binance API key شامل کرتا ہے۔ ہم اسے آپ کے webhook پر اسی طرح فراہم کرتے ہیں جیسے ڈیمو key فراہم کی تھی — وہی subscription.created ایونٹ، بس ان کے پروڈکشن کریڈینشلز کے ساتھ۔ ایک انضمام ڈیمو اور لائیو دونوں فلوز کا احاطہ کرتا ہے۔
ایک عام BuyCrypt اکاؤنٹ رجسٹر کریں — کسی بھی صارف جیسا ہی طریقہ کار۔ سائن اپ کرتے ہی آپ کو ابتدائی بیلنس کے ساتھ ایک مفت ڈیمو اکاؤنٹ جاری کیا جائے گا۔ کوئی درخواست فارم نہیں، کوئی جائزہ قطار نہیں۔
BuyCrypt موبائل ایپ کے اندر ہی API keys تیار کریں: My Profile → API keys → اپنے ڈیمو اکاؤنٹ پر ٹیپ کریں → Generate۔ آپ کو ایک تازہ apiKey + apiSecret ایک بار دکھایا جائے گا — انہیں اپنے بوٹ میں کاپی کریں۔ پھر اپنے موجودہ Binance USD-M Futures بوٹ کو https://api.buycrypt.com/fapi کی طرف موجہ کریں اور یہ بس کام کرتا ہے — وہی HMAC، وہی اینڈ پوائنٹس، وہی آرڈر کی اقسام۔
جیسے ہی ہم آپ کے ڈیمو پر API-محرک ٹریڈنگ کا پتہ لگاتے ہیں، آپ کا اکاؤنٹ خودکار طور پر بوٹ کے طور پر نشان زد ہو جاتا ہے۔ آپ کا ڈیمو 🤖 БОТ چپ اور ایک عوامی پروفائل کے ساتھ لیڈر بورڈ میں ظاہر ہوتا ہے، تاکہ دوسرے صارفین اسے دریافت اور سبسکرائب کر سکیں۔
جب آپ سبسکرائبرز لینے کے لیے تیار ہوں، تو سیٹنگز میں اپنے بوٹ پروفائل میں ایک webhook یو آر ایل شامل کریں۔ جب بھی کوئی صارف سبسکرائب کرتا ہے — ڈیمو پر یا حقیقی Binance کیز کے ساتھ — ہم اس صارف کے اکاؤنٹ کے لیے API key + secret کے ساتھ ایک subscription.created ایونٹ POST کرتے ہیں۔ (userId, apiKey, apiSecret) محفوظ کریں اور ان کی جانب سے ٹریڈنگ شروع کریں۔
زیادہ تر Binance Futures SDKs ایک کسٹم بیس یو آر ایل قبول کرتے ہیں۔ یہاں وہ مکمل تبدیلی ہے جس کی ایک عام Python بوٹ کو ضرورت ہوتی ہے:
# before — trading on real Binance from binance.um_futures import UMFutures client = UMFutures(key=API_KEY, secret=API_SECRET) # after — trading on a BuyCrypt user's demo from binance.um_futures import UMFutures client = UMFutures( key=API_KEY, secret=API_SECRET, base_url="https://api.buycrypt.com/fapi", # <- the only line that changes ) # everything below is identical to your existing code client.new_order(symbol="BTCUSDT", side="BUY", type="MARKET", quantity=0.01) client.account() client.cancel_open_orders(symbol="BTCUSDT")
CCXT, python-binance, Go کا go-binance، JS کا node-binance-api — سب اسی طرح کام کرتے ہیں۔ سادہ requests.get(...).headers["X-MBX-APIKEY"] = key بوٹس بھی کام کرتے ہیں؛ HMAC دستخط کا اصول بائٹ کے لحاظ سے بالکل ایک جیسا ہے۔
جب کوئی BuyCrypt صارف آپ کے بوٹ کو سبسکرائب کرتا ہے، تو ہم سرور سائیڈ پر فی صارف API key + secret تیار کرتے ہیں اور انہیں آپ کے رجسٹرڈ webhook یو آر ایل پر POST کرتے ہیں۔ secret کبھی بھی صارف کو واپس نہیں دیا جاتا — یہ صرف آپ کو، HTTPS پر، دستخط شدہ صورت میں بھیجا جاتا ہے۔
TL;DR: sign up → tap «Generate API key» on your demo → generate a webhook secret → run one Python script → admin approves. ~5 minutes.
Open buycrypt.com/terminal (or the mobile app). Sign in via Google or phone. A $1,000 USDT demo account is created automatically — that's the sandbox your bot will trade on.
In the app: Profile → API Keys → tap your demo account → «Bot API keys» → Generate. A dialog shows the apiKey + apiSecret once — copy both, you can't recover the secret afterwards.
# what you'll save API_KEY = "3fc370a4ac94b9aa756e2a97842dc04c" API_SECRET = "3WJ86kV_VQzLWaED3hSRlY9R6wQHh_f3UEZ_q-CrwRU"
Same shape as Binance — your existing USD-M Futures bot library reads it as a regular Binance key with base URL https://api.buycrypt.com/fapi.
A second secret, separate from API_SECRET. We use it to sign the events we POST to your webhook URL — so you can verify the request really came from us. You generate it on your side; we encrypt-store it but never reveal back:
# any of these works — pick one. Save the output. $ openssl rand -hex 32 # macOS / Linux $ python3 -c "import secrets; print(secrets.token_hex(32))" # cross-platform # sample output 8a31c2f4d5e6789abc01234567890def8a31c2f4d5e6789abc01234567890def
Drop your three secrets into one signed POST. Save this as register_bot.py and run it once. Works on any OS with Python 3.10+ and pip install requests:
import hmac, hashlib, time, urllib.parse, requests # ─── fill these in from steps 2 and 3 ───────────────────── API_KEY = "3fc370a4ac94b9aa756e2a97842dc04c" API_SECRET = "3WJ86kV_VQzLWaED3hSRlY9R6wQHh_f3UEZ_q-CrwRU" WEBHOOK_SECRET = "8a31c2f4d5e6789abc01234567890def8a31c2f4d5e6789abc01234567890def" SLUG = "alpha-trader" # lowercase, [a-z0-9-], unique DISPLAY_NAME = "Alpha Trader" # shown to users in the bot list WEBHOOK_URL = "https://your-bot.example.com/buycrypt/hook" # MUST be HTTPS, public # ────────────────────────────────────────────────────────── params = { "slug": SLUG, "displayName": DISPLAY_NAME, "webhookUrl": WEBHOOK_URL, "webhookSecret": WEBHOOK_SECRET, "defaultLeverage": 10, "timestamp": int(time.time() * 1000), } qs = urllib.parse.urlencode(params) sig = hmac.new(API_SECRET.encode(), qs.encode(), hashlib.sha256).hexdigest() r = requests.post( "https://api.buycrypt.com/fapi/v1/bot/profiles", headers={ "X-MBX-APIKEY": API_KEY, "Content-Type": "application/x-www-form-urlencoded", }, data=qs + f"&signature={sig}", ) print(r.status_code, r.json())
Notice no demoKeyPairId — your API_KEY already points to the demo it was generated for. Need to register against a different demo? Generate a separate API key for it (step 2 again).
Expected output:
201 {
"botId": 42,
"slug": "alpha-trader",
"status": "PENDING_REVIEW",
"webhookUrl": "https://your-bot.example.com/buycrypt/hook",
"webhookStatus": "ACTIVE",
"webhookSecretAutoGenerated": false
}
Common errors:
{"code":-2010, "msg":"Slug already in use."} # pick another slug
{"code":-1102, "msg":"webhookSecret must be at least 32..."} # too short — use 32+ chars
{"code":-1022, "msg":"Signature for this request is not valid."} # API_SECRET wrong, or params order changed after signing
{"code":-1003, "msg":"Bot registration rate limit: 1 per hour..."} # wait it out
Bot lands in PENDING_REVIEW. Our admin sees your request immediately and approves it. To check status anytime:
import hmac, hashlib, time, urllib.parse, requests API_KEY = "3fc370a4..." API_SECRET = "3WJ86kV..." qs = urllib.parse.urlencode({"timestamp": int(time.time() * 1000)}) sig = hmac.new(API_SECRET.encode(), qs.encode(), hashlib.sha256).hexdigest() r = requests.get( f"https://api.buycrypt.com/fapi/v1/bot/profiles?{qs}&signature={sig}", headers={"X-MBX-APIKEY": API_KEY}, ) print(r.json()) # [{"botId":42, "status":"ACTIVE", ...}] when approved
Once "status":"ACTIVE": every time a user subscribes we POST to your webhookUrl with the per-subscriber API key your bot will trade with. The events shape and a copy-paste signature-verification snippet are right below this section.
Lost your webhook secret? Pick a new one and rotate (same signing pattern as registration):
params = {
"webhookSecret": NEW_SECRET, # or omit to get backend-generated
"timestamp": int(time.time() * 1000),
}
qs = urllib.parse.urlencode(params)
sig = hmac.new(API_SECRET.encode(), qs.encode(), hashlib.sha256).hexdigest()
requests.post(
"https://api.buycrypt.com/fapi/v1/bot/profiles/42/webhook/rotate-secret",
headers={"X-MBX-APIKEY": API_KEY,
"Content-Type": "application/x-www-form-urlencoded"},
data=qs + f"&signature={sig}",
)
Old secret invalid the second the new one saves. Rate limit: 10 rotations/hour per bot.
subscription.created — صارف نے ابھی سبسکرائب کیاPOST https://your-bot.example.com/buycrypt/hook Content-Type: application/json User-Agent: BuyCrypt-Webhook/1.0 X-BuyCrypt-Event: subscription.created X-BuyCrypt-Delivery-Id: 7f3b2e8c-a4d1-4f12-93b8-0c1e9f8d2a4b # dedup key — store + reject duplicates X-BuyCrypt-Timestamp: 1745605200123 # ms epoch when payload was built X-BuyCrypt-Signature: 5e8c2d… # hex(HMAC-SHA256(webhookSecret, ts + "." + body)) { "event": "subscription.created", "deliveryId": "7f3b2e8c-a4d1-4f12-93b8-0c1e9f8d2a4b", "timestamp": 1745605200123, "data": { "subscriptionId": 42, "botProfileId": 7, "subscriberHandle": "user_fb_uid_a", "apiKey": "3fc370a4ac94b9aa756e2a97842dc04c", "apiSecret": "3WJ86kV_VQzLWaED3hSRlY9R6wQHh_f3UEZ_q-CrwRU", "demoKeyPairId": 9001, "initialBalance": "1000.00000000", "permissions": "READ_TRADE", "ipWhitelist": "", "createdAt": "2026-04-25T18:00:00Z" } }
subscription.deleted — صارف منقطع ہو گیا، key غیر فعالX-BuyCrypt-Event: subscription.disconnected { "event": "subscription.disconnected", "deliveryId": "…", "timestamp": …, "data": { "subscriptionId": 42, "botProfileId": 7, "apiKey": "3fc370a4…", "reason": "USER_UNSUBSCRIBED", "disconnectedAt": "2026-04-25T18:30:00Z" } }
secret.regenerated — ایڈمن نے آپ کا webhook secret تبدیل کیاX-BuyCrypt-Event: secret.regenerated { "event": "secret.regenerated", "deliveryId": "…", "timestamp": …, "data": { "subscriptionId": 42, "apiKey": "3fc370a4…", "newApiSecret": "new_plaintext_keep_old_valid_24h", "oldSecretValidUntil": "2026-04-26T18:00:00Z" } }
Use the raw request body bytes — DO NOT parse JSON first and re-serialize, you'll lose key order and signatures will diverge. Always compare in constant time.
# Python (FastAPI / Flask) import hmac, hashlib, time WEBHOOK_SECRET = "whsec_aGVsbG8gd29ybGQ_..." # whsec_…43 chars def verify(headers, body_bytes): sig = headers["X-BuyCrypt-Signature"] ts = int(headers["X-BuyCrypt-Timestamp"]) # anti-replay: reject if too old if abs(time.time() * 1000 - ts) > 5 * 60 * 1000: return False payload = f"{ts}.".encode() + body_bytes expected = hmac.new(WEBHOOK_SECRET.encode(), payload, hashlib.sha256).hexdigest() return hmac.compare_digest(expected, sig)
// Node.js / Express — read RAW body, not parsed JSON const crypto = require('crypto'); const SECRET = 'whsec_aGVsbG8gd29ybGQ_...'; app.post('/buycrypt/hook', express.raw({ type: 'application/json' }), // raw, not json()! (req, res) => { const sig = req.headers['x-buycrypt-signature']; const ts = parseInt(req.headers['x-buycrypt-timestamp'], 10); if (Math.abs(Date.now() - ts) > 5 * 60 * 1000) return res.status(401).end(); const expected = crypto.createHmac('sha256', SECRET) .update(`${ts}.`).update(req.body).digest('hex'); if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig))) { return res.status(401).end(); } // req.body is a Buffer here — JSON.parse(req.body.toString('utf8')) res.sendStatus(200); });
exponential backoff کے ساتھ 6 کوششیں: 1m، 5m، 30m، 2h، 6h، 12h۔ تمام 6 ناکام ہونے کے بعد، ایونٹ ہمارے dead-letter ٹیبل میں چلا جاتا ہے اور ایک ایڈمن اسے دوبارہ چلا سکتا ہے۔
اگر آپ کا اینڈ پوائنٹ لگاتار 10 بار ناکام ہو جائے، تو ہم اسے غیر فعال کے طور پر نشان زد کر کے ایونٹس بھیجنا بند کر دیتے ہیں۔ دوبارہ فعال کروانے کے لیے ہم سے رابطہ کریں۔ یہ ایک غیر فعال بوٹ کو نئے سبسکرائبرز کو غیر معینہ مدت تک روکنے سے روکتا ہے۔
ہر باڈی رجسٹریشن کے وقت شیئر کیے گئے secret کے ساتھ HMAC-SHA256 دستخط شدہ ہوتی ہے۔ payload پر اعتماد کرنے سے پہلے constant time میں تصدیق کریں۔ مثالیں ہماری پارٹنر گائیڈ میں موجود ہیں۔
بیس یو آر ایل: https://api.buycrypt.com/fapi۔ تصدیق: X-MBX-APIKEY ہیڈر + دستخط شدہ اینڈ پوائنٹس پر HMAC-SHA256 دستخط۔ Recv window: ڈیفالٹ 5,000 ms، زیادہ سے زیادہ 60,000 ms۔
{} واپس کرتا ہے۔MARKET, LIMIT, STOP_MARKET, TAKE_PROFIT_MARKET, STOP, TAKE_PROFIT (limit-قسم)، TRAILING_STOP_MARKET کو سپورٹ کرتا ہے۔ فلیگز: reduceOnly, closePosition, timeInForce (GTC/IOC/FOK)، idempotency کے لیے newClientOrderId, workingType, callbackRate۔orderId یا origClientOrderId کے ذریعے ایک آرڈر کو query کریں۔{dualSidePosition: false} واپس کرتا ہے۔ORDER_TRADE_UPDATE, ACCOUNT_UPDATE, MARGIN_CALL۔ Binance جیسی ہی payload شکل۔subscribe/unsubscribe/list_subscriptions کنٹرول میسجز کو سپورٹ کرتا ہے — upstream Binance کے لیے passthrough۔X-MBX-USED-WEIGHT-1M, X-MBX-ORDER-COUNT-10S، 429 پر Retry-After۔Retry-After کے ذریعے سست ہو جائیںکوئی درخواست فارم نہیں، کوئی جائزہ قطار نہیں، کوئی انضمام فیس نہیں۔ کسی بھی صارف کی طرح سائن اپ کریں، موبائل ایپ میں API keys بنائیں، اپنے بوٹ کو https://api.buycrypt.com/fapi کی طرف موجہ کریں — بس یہی پوری آن بورڈنگ ہے۔