BuyCrypt
Бот әзірлеушілері үшін

Сауда ботыңызды қосыңыз. Дәл сол Binance API.

Егер ботыңыз Binance USD-M Futures-пен жұмыс істей алса, бір base URL-ді ауыстырыңыз — сонда BuyCrypt-те іске қосыласыз. Пайдаланушыларымыз ботыңызды рейтинг кестесінен тауып, тегін $1,000 демо-шотта сынайды және сенімді болғанда нақты кілттерге көшеді.

Кодты қайта жазудың қажеті жоқ. Биржаға тән ерекшеліктер жоқ. Дәл сол HMAC-SHA256 қолтаңбасы, дәл сол WebSocket user-data ағыны, дәл сол бұйрық түрлері — демо-сауда қозғалтқышымызбен қапталған, сондықтан пайдаланушылар капиталды тәуекелге салмай-ақ боттарды салыстыра алады.

Неге BuyCrypt

Сауда боттары үшін демодан басталатын тарату

Әр пайдаланушыға тегін $1,000 демо

Жазылған әрбір пайдаланушы $1,000 виртуалды баланспен өз демо-шотын алады. Ботыңыз онда сауда жасайды. Олар тікелей PnL, drawdown, жеңіс пайызын бақылайды. Нақты капиталға тәуекел жоқ — және сізге тарту құны жоқ.

Рейтинг кестесінде көрінеу

Ботыңыздың демо-шоты ашық рейтинг кестесінде 🤖 БОТ белгісімен көрінеді. Пайдаланушылар нақты трейдерлер арасында PnL бойынша рейтингті көреді. Жолды түртіп, "Қосылу" батырмасын басыңыз — жазылу лезде болады.

Кодты қайта жазу қажет емес

Егер ботыңыз кез келген Binance Futures SDK (binance-connector-python, python-binance, CCXT және т.б.) пайдаланса, оның base_url мәнін https://api.buycrypt.com/fapi мекенжайына бағыттаңыз. HMAC, recvWindow, бұйрық түрлері — бірдей.

Webhook арқылы жеткізілетін кілттер

Пайдаланушы жазылған кезде, біз жаңадан жасалған API кілт + secret-ті webhook URL-ге POST арқылы жібереміз — HMAC-қолтаңбаланған, сәтсіздік кезінде экспоненциалды backoff-пен қайталанады, dead-letter арқылы қалпына келтіріледі. Пайдаланушыдан деректерді сұраудың қажеті жоқ.

Пайдаланушы жолы

Пайдаланушылар ботыңызды қалай тауып, жазылады

1

Табу

Пайдаланушы рейтинг кестесін ашады. Ботыңыздың шоты пайдаланушы аты жанында 🤖 БОТ белгісімен және жазылушылар санымен көрінеді. Олар жолды түртеді.

2

Демода сынау

Бот профилінде олар "Демо-шотқа қосылу" деген жазуды көреді. Бір түртім оларға жаңа $1,000 демо-шот жасайды, ал ботыңыз онда сауда жасай бастайды.

3

Бақылау + шешім қабылдау

Пайдаланушы боттың демо-шотында күндер немесе апталар бойы сауда жасағанын бақылайды. PnL, позициялар, жеңіс пайызы — барлығы қосымшада тікелей көрінеді. Ұнаса, олар демодан нақты режимге көшу үшін BuyCrypt ішінде нақты Binance API кілтін енгізеді.

4

Нақты режимге өту

Пайдаланушы BuyCrypt ішінде нақты Binance API кілтін қосады. Біз оны webhook-ке демо кілтті жеткізген сияқты жеткіземіз — дәл сол subscription.created оқиғасы, тек нақты деректерімен. Бір интеграция демо және нақты ағындарды да қамтиды.

Әзірлеушіні қосу

Ботыңызды BuyCrypt-ке қалай қосу керек

1

Тіркелу

Кәдімгі BuyCrypt шотын тіркеңіз — кез келген пайдаланушыдағыдай процесс. Тіркелген сәтте сізге бастапқы баланспен тегін демо-шот беріледі. Өтінім формасы жоқ, тексеру кезегі жоқ.

2

API арқылы демода сауда жасаңыз

API кілттерін тікелей BuyCrypt мобильді қосымшасында жасаңыз: Менің профилім → API кілттер → демо-шотыңызды түртіңіз → Generate. Сізге бір рет көрсетілетін жаңа apiKey + apiSecret беріледі — оларды ботыңызға көшіріңіз. Содан кейін қолданыстағы Binance USD-M Futures ботыңызды https://api.buycrypt.com/fapi мекенжайына бағыттаңыз — бәрі жұмыс істей береді: дәл сол HMAC, дәл сол endpoint-тер, дәл сол бұйрық түрлері.

3

Автоматты түрде бот ретінде белгіленеді

Демо-шотыңызда API арқылы сауда байқалысымен, шотыңыз автоматты түрде бот ретінде белгіленеді. Демо-шотыңыз рейтинг кестесінде 🤖 БОТ белгісімен және ашық профильмен көрінеді, сондықтан басқа пайдаланушылар оны тауып, жазыла алады.

4

(Қосымша) Webhook арқылы жазылушыларды қабылдау

Жазылушыларды қабылдауға дайын болғанда, баптауларда бот профиліңізге webhook URL қосыңыз. Пайдаланушы жазылған сайын — демода немесе нақты Binance кілттерімен — біз сол пайдаланушының шоты үшін API кілт + secret-пен subscription.created оқиғасын POST арқылы жібереміз. (userId, apiKey, apiSecret) сақтап, олардың атынан сауда жасауды бастаңыз.

Оңай ауыстыру

Қолданыстағы Binance Futures ботыңыз қайта пайдаланылады

Binance Futures SDK-ларының көпшілігі өзгертілген base URL-ді қабылдайды. Әдеттегі 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 қолтаңба ережесі бірдей.

Webhook

API кілттерін жүйеңізге қалай жеткіземіз

BuyCrypt пайдаланушысы ботыңызға жазылған кезде, біз сервер жағында пайдаланушыға арналған API кілт + secret жасаймыз және оларды тіркелген webhook URL-ге 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.

Step 1 — Sign up

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.

Step 2 — Generate your trading API key (in the app)

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.

Step 3 — Generate your webhook signing secret

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

Step 4 — Register the bot (one signed POST)

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

Step 5 — Wait for approve, then receive events

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.

Webhook event shapes (what we POST to you)

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 — пайдаланушы ажыратылды, кілт өшірілді

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"
  }
}

Verify the signature (constant-time)

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);
});

Қайталау саясаты

Экспоненциалды backoff-пен 6 әрекет: 1 мин, 5 мин, 30 мин, 2 сағ, 6 сағ, 12 сағ. Барлық 6 әрекет сәтсіз болса, оқиға dead-letter кестемізге түседі және әкімші оны қайта іске қоса алады.

Автоматты өшіру

Егер endpoint-іңіз қатарынан 10 рет сәтсіз болса, біз оны өшірулі деп белгілеп, оқиғалар жіберуді тоқтатамыз. Қайта қосу үшін бізбен байланысыңыз. Бұл өлі боттың жаңа жазылушыларды шексіз бөгеуін болдырмайды.

Қолтаңбаны тексеру

Әрбір дене тіркеу кезінде бөлісілген secret-пен HMAC-SHA256 қолтаңбаланады. Деректерге сенбес бұрын тұрақты уақытта тексеріңіз. Мысалдар серіктес нұсқаулығымызда бар.

API мүмкіндіктері

Біз қолдайтын барлық Binance USD-M Futures әдістері

Base URL: https://api.buycrypt.com/fapi. Авторизация: қолтаңбаланған endpoint-терде X-MBX-APIKEY тақырыбы + HMAC-SHA256 қолтаңбасы. Recv window: әдепкі 5,000 мс, максимум 60,000 мс.

Жалпыға қолжетімді нарық деректері (авторизациясыз)

GET
/v1/ping
Жұмысқа қабілеттілікті тексеру. {} қайтарады.
GET
/v1/time
Сервер уақыты мс-пен — recvWindow сәйкессіздіктерін болдырмау үшін сағатыңызды синхрондаңыз.
GET
/v1/exchangeInfo
Символдар, сүзгілер, дәлдік, leverage деңгейлері.
GET
/v1/ticker/price · /ticker/24hr · /ticker/bookTicker
Соңғы мәміле бағасы · 24 сағаттық статистика · үздік bid/ask.
GET
/v1/depth?symbol=&limit=
Бұйрықтар кітабының снимогі (limit ∈ {5,10,20,50,100,500,1000}).
GET
/v1/klines
Кез келген интервал үшін OHLCV шамдары (1m, 5m, 1h, 4h, 1d).
GET
/v1/markPrice · /v1/fundingRate · /v1/premiumIndex
Ликвидацияны есептеу үшін mark price · funding тарихы · premium индексі.
GET
/v1/trades · /v1/aggTrades
Соңғы мәмілелер және жинақталған мәмілелер.

Шот & позициялар (қолтаңбаланған)

GET
/v1/account · /v2/account · /v3/account
Толық шот снимогі — баланстар, жалпы margin, актив бойынша, ағымдағы позициялар. Барлық үш жол нұсқасы бірдей payload қайтарады (Binance үйлесімділігі).
GET
/v2/balance · /v3/balance
Актив бойынша әмиян балансы. Біз тек USDT шығарамыз.
GET
/v2/positionRisk · /v3/positionRisk
Mark price, кіру бағасы, іске аспаған PnL, ликвидация бағасы бар белсенді позициялар.
GET
/v1/userTrades · /v1/income · /v1/commissionRate · /v1/leverageBracket
Мәмілелер тарихы · іске асқан табыс · символ бойынша комиссия мөлшерлемесі · leverage деңгейлері.

Сауда (қолтаңбаланған)

POST
/v1/order
Бұйрық орналастыру. MARKET, LIMIT, STOP_MARKET, TAKE_PROFIT_MARKET, STOP, TAKE_PROFIT (limit түрі), TRAILING_STOP_MARKET қолдайды. Жалаушалар: reduceOnly, closePosition, timeInForce (GTC/IOC/FOK), идемпотенттілік үшін newClientOrderId, workingType, callbackRate.
GET
/v1/order
orderId немесе origClientOrderId бойынша жалғыз бұйрықты сұрау.
DELETE
/v1/order
Бір бұйрықты болдырмау.
DELETE
/v1/allOpenOrders?symbol=X
Бір шақыруда символдағы барлық ашық бұйрықтарды болдырмау.
GET
/v1/openOrders
Барлық қазіргі белсенді (орындалмаған, болдырылмаған) бұйрықтар.
GET
/v1/allOrders
Бұйрықтар тарихы. Әдепкі бойынша соңғы 500.
POST
/v1/leverage · /v1/marginType · /v1/positionMargin
Leverage орнату (1×–125×) · ISOLATED/CROSS · оқшауланған margin толықтыру.
GET
/v1/positionSide/dual
Hedge-mode жалаушасы. Қазірше тек біржақты режимдеміз — {dualSidePosition: false} қайтарады.

User-data WebSocket (жеке)

POST
/v1/listenKey
60 минуттық listenKey жасау. WS handshake-ті аутентификациялау үшін пайдаланыңыз.
PUT
/v1/listenKey
listenKey мерзімін тағы 60 минутқа ұзарту. Ағынды белсенді ұстау үшін әрбір < 60 минут сайын шақырыңыз.
DELETE
/v1/listenKey
Жұмысты аяқтағанда listenKey-ді жабыңыз.
WS
wss://api.buycrypt.com/fapi/ws/<listenKey>
Бұйрықтар, баланс, позициялар үшін push оқиғалары: ORDER_TRADE_UPDATE, ACCOUNT_UPDATE, MARGIN_CALL. Binance-пен бірдей payload пішіні.

Market-data WebSocket (жалпыға қолжетімді)

WS
wss://api.buycrypt.com/fapi/stream?streams=btcusdt@trade/btcusdt@kline_1m
Көп ағынды жазылу. subscribe/unsubscribe/list_subscriptions басқару хабарламаларын қолдайды — тікелей Binance-қа өтеді.
Шектеулер & қателер

Сұраныс шектеулері және қате кодтары

API кілті бойынша шектеу топтары

  • Салмақ: 2,400 / минут
  • Бұйрық орналастыру: 300 / 10 секунд
  • Қолтаңбаланған оқулар: 1,200 / минут
  • Әрбір жауаптағы тақырыптар: X-MBX-USED-WEIGHT-1M, X-MBX-ORDER-COUNT-10S, 429 кезінде Retry-After.

Жиі кездесетін қате кодтары

  • -1003 Тым көп сұраныс — Retry-After арқылы бәсеңдетіңіз
  • -1021 Timestamp recvWindow шегінен тыс
  • -1022 Жарамсыз қолтаңба
  • -1102 Міндетті параметр жіберілмеген
  • -1116 Жарамсыз бұйрық түрі
  • -2010 Бұйрық қабылданбады (баланс жеткіліксіз және т.б.)
  • -2011 Белгісіз бұйрық
  • -2014 API кілтінің форматы жарамсыз
  • -2015 Жарамсыз API кілті, IP немесе рұқсаттар
  • -2019 Margin жеткіліксіз

Ботыңызды қосуға дайынсыз ба?

Өтінім формасы жоқ, тексеру кезегі жоқ, интеграция төлемі жоқ. Кез келген пайдаланушы сияқты тіркеліңіз, мобильді қосымшада API кілттерін жасаңыз, ботыңызды https://api.buycrypt.com/fapi мекенжайына бағыттаңыз — бүкіл қосылу процесі осы ғана.