ВойтиSign in

API FundingArb

Всё, что настраивается на сайте, настраивается и через API: торговля, фильтры скринера, опционы и бот — теми же проверками, что у страницы настроек. Плюс возможности, позиции, сделки и история.Everything you can configure on the site can be configured through the API: trading, screener filters, options and the bot — with the same checks as the settings page. Plus opportunities, positions, trades and history.

Быстрый стартQuick start

Адрес — https://funding-arb.com. Тела — JSON (Content-Type: application/json). Три шага:Base URL — https://funding-arb.com. Bodies are JSON (Content-Type: application/json). Three steps:

# 1. токен (у аккаунта с 2FA — добавьте "code": "<6 цифр>")
curl -s -X POST https://funding-arb.com/api/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"username":"you@example.com","password":"…","code":"123456"}'
# → { "token": "eyJ…", "expires": "2026-10-29T12:00:00Z", "username": "you" }

# 2. прочитать настройки торговли
curl -s https://funding-arb.com/api/v1/settings/trade -H 'Authorization: Bearer eyJ…'

# 3. изменить только нужные поля (частичное тело, CSRF не нужен)
curl -s -X PATCH https://funding-arb.com/api/v1/settings/trade \
  -H 'Authorization: Bearer eyJ…' -H 'Content-Type: application/json' \
  -d '{"maxSpreadPercent":0.8,"defaultLeverage":5}'

Вход и токенAuthentication

Токен доступа — JWT, живёт 1 час. Передавайте его в заголовке Authorization: Bearer <token>. Токен даёт все права вашего аккаунта, храните его как пароль. Отдельных токенов «только чтение» пока нет.The access token is a JWT valid for 1 hour. Send it as Authorization: Bearer <token>. The token carries all your account's rights — keep it like a password. Separate read-only tokens do not exist yet.

POST /api/auth/login

Тело: username (имя или почта), password; code — текущий 6-значный код приложения-аутентификатора, если включена 2FA (а она обязательна для /api/v1/trade и реального бота). Код проверяется после пароля; повтор того же кода и перебор закрыты.Body: username (name or e-mail), password; code — the current 6-digit authenticator code when 2FA is on (it is required for /api/v1/trade and the live bot). The code is checked after the password; reusing a code and brute force are blocked.

{ "username": "you@example.com", "password": "…", "code": "123456" }
→ 200 { "token": "eyJ…", "expires": "2026-10-29T12:00:00Z", "username": "you" }
   + Set-Cookie: refresh_token=…; HttpOnly; Path=/api/auth (14 дней / 14 days)
КодStatusОтветBody
400{ error: "Username and password required" }{ error: "Username and password required" }
401{ success: false, error: "Invalid username or password" } — после 5 неудач за 15 мин с адреса — блок, заголовок Retry-After{ success: false, error: "Invalid username or password" } — after 5 failures in 15 min from an address — lockout, Retry-After header
403{ success: false, code: "totp_required" } — у аккаунта 2FA, пришлите code{ success: false, code: "totp_required" } — the account has 2FA, send code
401{ success: false, code: "totp_invalid" } — код неверный или уже использован{ success: false, code: "totp_invalid" } — wrong or already used code
429{ success: false, code: "too_many_attempts" } — перебор кодов, Retry-After{ success: false, code: "too_many_attempts" } — too many codes, Retry-After

POST /api/auth/refresh

Новый токен доступа по куке refresh_token (её ставит вход); старая кука сменяется новой. Повтор уже сменённой куки считается кражей: отзываются все сессии. Как у любого POST по куке, нужен CSRF: одинаковое значение в куке CSRF-TOKEN и заголовке X-CSRF-TOKEN. Проще — по истечении токена снова вызвать /api/auth/login.A new access token from the refresh_token cookie (set by login); the old cookie is rotated. Re-presenting an already rotated cookie counts as theft: every session is revoked. Like any cookie POST it needs CSRF: the same value in the CSRF-TOKEN cookie and the X-CSRF-TOKEN header. Simpler — call /api/auth/login again when the token expires.

curl -s -X POST https://funding-arb.com/api/auth/refresh \
  -H 'Cookie: refresh_token=…; CSRF-TOKEN=r4nd0m' -H 'X-CSRF-TOKEN: r4nd0m'
→ 200 { "token": "eyJ…", "expires": "…", "username": "you" }   401 { "error": "refresh token invalid or expired" }

POST /api/auth/logout

Отзывает refresh-токен из куки (и все — для cookie-сессии сайта). Токен доступа доживает свой час. CSRF — как у refresh.Revokes the refresh token from the cookie (and all of them for a site cookie session). The access token lives out its hour. CSRF — as for refresh.

Запросы и ответыRequests and responses

Лимиты частотыRate limits

Превышение — 429 «Too many requests. Please try again later.» и заголовок Retry-After (секунды).Exceeding a limit returns 429 «Too many requests. Please try again later.» with a Retry-After header (seconds).

ГдеWhereЛимитLimit
POST /api/v1/tradePOST /api/v1/trade5 в секунду на пользователя5 per second per user
/api/v1/settings/*, /api/v1/bot/*, DELETE /api/v1/history/{id}/api/v1/settings/*, /api/v1/bot/*, DELETE /api/v1/history/{id}60 в минуту на пользователя; счётчик общий для этих маршрутов и с запросами открытых вкладок сайта (опционы, бот)60 per minute per user; one counter for these routes, shared with the requests of your open site tabs (options, bot)
POST /api/auth/loginPOST /api/auth/login5 неудачных входов за 15 минут с адреса; 5 неверных кодов 2FA за 15 минут на аккаунт5 failed logins in 15 minutes per address; 5 wrong 2FA codes in 15 minutes per account
POST /api/v1/bot/mode (код 2FA)POST /api/v1/bot/mode (2FA code)тот же счётчик неверных кодов, что у входа и сайтаthe same wrong-code counter as login and the site
остальные маршруты /api/v1other /api/v1 routesотдельного лимита нет — не опрашивайте чаще раза в секундуno separate limit — do not poll more than once a second

ОшибкиErrors

Форма тела ошибки у разделов разная (так сложилось исторически) — она одна и та же для сайта и API:The error body shape differs between sections (historically) — it is the same for the site and the API:

РазделSectionТелоBody
настройки торговлиtrade settings{ success: false, error, errors: [{ field, code, allowed? }] } · 403: { success: false, error, rejectedFields }
фильтры скринераscreener filters{ success: false, message, errors: [{ field, code, min?, max?, sum? }] } · 403: { success: false, message, rejectedFields, filtersSaved? }
настройки опционовoptions settings{ error: "<code>", detail, field, tierCapUsd? }
ботbot{ success: false, code } или / or { success: false, errors: [{ field, code, min?, max?, allowed? }] }
сделкиtrades{ error } / { success: false, message } / { success: false, code, error, message } (two_factor_required)
401нет токена, токен истёк или негоден — пустое телоno token, expired or invalid token — empty body
402{ error: "subscription_expired", plan, expiredAt, message, redirectTo }
429текст «Too many requests…» + Retry-Aftertext «Too many requests…» + Retry-After

МаршрутыEndpoints

МетодMethodПутьPathЧто делаетWhat it does
GET/api/v1/opportunitiesВозможности фандингаFunding opportunities
GET/api/v1/positionsОткрытые позицииOpen positions
GET/api/v1/balancesБалансыBalances
GET/api/v1/historyИстория сделокTrade history
DELETE/api/v1/history/{id}Удалить строку историиDelete a history row
POST/api/v1/tradeОткрыть хеджированную позициюOpen a hedged position
POST/api/v1/closeЗакрыть позициюClose a position
POST/api/v1/leverage/setupВыставить плечо на биржахSet leverage on the venues
GET/api/v1/leverage/statusПрогресс установки плечаLeverage setup progress
GET/api/v1/settings/tradeНастройки торговлиTrade settings
PATCH/api/v1/settings/tradeИзменить настройки торговлиChange trade settings
GET/api/v1/settings/screenerФильтры скринера и веса ScoreScreener filters and Score weights
PATCH/api/v1/settings/screenerИзменить фильтры и весаChange filters and weights
GET/api/v1/settings/optionsНастройки опционовOptions settings
PATCH/api/v1/settings/optionsИзменить настройки опционовChange options settings
GET/api/v1/bot/settingsНастройки ботаBot settings
PATCH/api/v1/bot/settingsИзменить настройки ботаChange bot settings
POST/api/v1/bot/modeВключить, выключить, сменить режим ботаEnable, disable or switch the bot mode
GET/api/v1/bot/previewЧто бот сделал бы сейчасWhat the bot would do now
GET/api/v1/bot/journalЖурнал сделок ботаBot trade journal
POST/api/v1/bot/backtestПрогон по архивуArchive backtest

GET /api/v1/opportunities

Текущие связки с вашими фильтрами скринера и весами Score: только биржи вашего тарифа и пары, прошедшие гейт идентичности актива. Имена полей — PascalCase.Current opportunities with your screener filters and Score weights: only venues of your plan and pairs that passed the asset-identity gate. Field names are PascalCase.

ЛимитLimit
отдельного нетnone of its own
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
ОтветResponse
[
  { "Symbol": "BTCUSDT", "LowExchange": "okx", "HighExchange": "bybit",
    "LowFundingRate": 0.001, "HighFundingRate": 0.012, "NormalizedEdgePer8hPct": 0.011,
    "Basis": -0.02, "Score": 0.71, "LongVolume": 1200000000, "ShortVolume": 3400000000,
    "NextFundingTimestampMs": 1761724800000, "…": "…" }
]

GET /api/v1/positions

Живые позиции по вашим ключам (и управляемые сервисом, и чужие). Имена полей — PascalCase.Live positions on your keys (managed by the service or not). Field names are PascalCase.

ЛимитLimit
отдельного нетnone of its own
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
ОтветResponse
{ "success": true, "positions": [
  { "Exchange": "okx", "Symbol": "BTCUSDT", "Side": "long", "Quantity": "0.01", "EntryPrice": "68000",
    "UnrealizedPnl": "1.2", "IsManaged": true, "PositionKey": "…", "LivePnL": 0.8, "CloseMode": "funding", "…": "…" } ] }

GET /api/v1/balances

Свободный USDT по каждой бирже, где есть ключ. Имена полей — PascalCase.Free USDT on each venue with a key. Field names are PascalCase.

ЛимитLimit
отдельного нетnone of its own
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
ОтветResponse
{ "success": true, "data": [ { "Exchange": "okx", "FreeUSDT": 512.4, "HasKey": true } ] }

GET /api/v1/history

Все ваши сделки фандинга, новые первыми (camelCase).All your funding trades, newest first (camelCase).

ЛимитLimit
отдельного нетnone of its own
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 500 — { success: false, error: "Internal server error" }{ success: false, error: "Internal server error" }
ОтветResponse
{ "success": true, "data": [
  { "id": 42, "symbol": "BTCUSDT", "longExchange": "okx", "shortExchange": "bybit", "amountUsd": 100,
    "openTime": "2026-10-28T07:55:00Z", "closeTime": "2026-10-28T08:00:05Z", "status": "closed",
    "pnL": 0.07, "totalPnl": 0.07, "feePaid": 0.11, "closeType": "AUTO", "durationSec": 305, "…": "…" } ] }

DELETE /api/v1/history/{id}

Удаляет вашу строку истории по id. Чужая или несуществующая — 200 с success=false.Deletes your history row by id. Someone else's or missing — 200 with success=false.

ЛимитLimit
60/мин на пользователя60/min per user
ПараметрыParameters
id — целое, из GET /api/v1/historyid — integer, from GET /api/v1/history
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ОтветResponse
{ "success": true }
{ "success": false, "error": "Not found" }

POST /api/v1/trade

Лонг на одной бирже, шорт на другой — тем же путём, что кнопка, с допусками «API и бот» из настроек торговли. Нужна включённая 2FA. requestId (uuid) защищает от двойной отправки: повтор с тем же телом вернёт тот же ответ.Long on one venue, short on the other — the same path as the button, with the «API & bot» checks from the trade settings. Requires 2FA. requestId (uuid) protects against double submit: a repeat with the same body returns the same answer.

ЛимитLimit
5/с на пользователя5/s per user
ПараметрыParameters
symbol, longExchange, shortExchange — обязательны, биржи разные; positionValueUsd — 5…1 000 000 (нет — 25); closeMode — funding | basis (нет — defaultCloseMode); basisThreshold — % для basis; requestId — uuid.symbol, longExchange, shortExchange — required, venues differ; positionValueUsd — 5…1,000,000 (absent — 25); closeMode — funding | basis (absent — defaultCloseMode); basisThreshold — % for basis; requestId — uuid.
ОшибкиErrors
  • 400 — { error } — нет пары/бирж, биржи совпадают, positionValueUsd вне 5…1 000 000; asset_identity_rejected — пара отвергнута гейтом идентичности{ error } — missing pair/venues, same venue twice, positionValueUsd outside 5…1,000,000; asset_identity_rejected — pair rejected by the identity gate
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 403 — two_factor_required (включите 2FA); { error } — тариф не пускает, биржа не в тарифе, дневной лимит сделокtwo_factor_required (enable 2FA); { error } — plan blocked, venue not on the plan, daily trade limit
  • 202 — { status, requestId } — сделка с этим requestId ещё идёт{ status, requestId } — the trade with this requestId is still running
  • 409 — тот же requestId с другим телом, или прежняя попытка с этим requestId упала (тело — её ответ)same requestId with a different body, or the earlier attempt with it failed (body — its answer)
  • 429 — не больше 5 в секунду на пользователяat most 5 per second per user
ЗапросRequest
{ "symbol": "BTCUSDT", "longExchange": "okx", "shortExchange": "bybit",
  "positionValueUsd": 100, "closeMode": "funding", "requestId": "6f1c2b9e-2c1e-4f61-9a7e-1b2c3d4e5f60" }
ОтветResponse
{ "success": true, "positionKey": "BTCUSDT_okx_bybit_…" }
{ "success": false, "message": "Long check failed: spread 0.9% > 0.5%" }

POST /api/v1/close

Закрытие с той же проверкой стакана и настройками «API и бот», что у монитора (ожидание ликвидности, «нет стакана», «ожидание истекло»). Если уложилось в 20 с — итог, иначе initiated (дальше — в фоне, итог в уведомлениях). Работает и при истёкшей подписке.Close with the same book check and «API & bot» settings as the monitor (liquidity wait, no book, wait expired). Within 20 s — the result, otherwise initiated (continues in the background, the result comes as a notification). Works with an expired subscription too.

ЛимитLimit
отдельного нетnone of its own
ПараметрыParameters
positionKey — из /api/v1/positionspositionKey — from /api/v1/positions
ОшибкиErrors
  • 400 — { error: "positionKey required" }{ error: "positionKey required" }
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
ЗапросRequest
{ "positionKey": "BTCUSDT_okx_bybit_…" }
ОтветResponse
{ "success": true, "initiated": true, "status": "…", "message": "…" }

POST /api/v1/leverage/setup

Запускает в фоне установку плеча по всем вашим ключам; прогресс — GET /api/v1/leverage/status.Starts setting leverage on all your keys in the background; progress — GET /api/v1/leverage/status.

ЛимитLimit
отдельного нетnone of its own
ОшибкиErrors
  • 400 — { success: false, message: "No API keys configured" }{ success: false, message: "No API keys configured" }
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
ОтветResponse
{ "success": true, "message": "Leverage setup started for 3 exchanges" }

GET /api/v1/leverage/status

Состояние последнего запуска установки плеча по биржам.State of the last leverage setup run per venue.

ЛимитLimit
отдельного нетnone of its own
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
ОтветResponse
{ "isRunning": false, "startedAt": "…", "completedAt": "…",
  "exchanges": [ { "exchange": "okx", "status": "done", "success": 120, "failed": 0, "total": 120, "error": null, "autoManaged": false } ] }

GET /api/v1/settings/trade

Значения всех полей, которые принимает PATCH, под теми же camelCase-именами, и locked — поля, которые ваш тариф менять не даёт (их смена — 403).Values of every field PATCH accepts, under the same camelCase names, and locked — fields your plan cannot change (changing them is 403).

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ОтветResponse
Показать весь ответShow the full answer
{
  "success": true,
  "data": {
    "maxSpreadPercent": 0.5,
    "maxPriceDivergencePercent": 2,
    "liquiditySafetyMultiplier": 1,
    "defaultLeverage": 10,
    "depthMultiplier": 2,
    "maxOpenSlippagePct": 20,
    "allowPartialOpen": true,
    "minPartialOpenPct": 20,
    "sizeMismatchOpenPct": 10,
    "openRetryCount": 1,
    "manualOpenSlippageCheck": true,
    "manualMaxOpenSlippagePct": 20,
    "manualAllowPartialOpen": false,
    "manualMaxSpreadPct": 1,
    "manualMaxDivergencePct": 3,
    "manualLiquidityMultiplier": 1,
    "manualMinPartialOpenPct": 20,
    "manualSizeMismatchOpenPct": 10,
    "manualOpenRetryCount": 2,
    "maxOpenTimeSec": 30,
    "manualMaxOpenTimeSec": 15,
    "closeRetryAttempts": 2,
    "positionSizeMismatchTolerance": 2,
    "closeRetryDelaySeconds": 3,
    "closeTriggerBufferSec": 5,
    "maxCloseSlippagePct": 30,
    "allowPartialClose": true,
    "minPartialClosePct": 20,
    "slippageWaitMaxMin": 10,
    "closeRetryCount": 2,
    "manualCloseSlippageCheck": true,
    "manualMaxCloseSlippagePct": 30,
    "manualAllowPartialClose": false,
    "manualSlippageWaitMaxMin": 2,
    "manualCloseRetryAttempts": 2,
    "manualSizeMismatchClosePct": 2,
    "manualRetryDelaySec": 3,
    "manualMinPartialClosePct": 20,
    "manualCloseRetryCount": 2,
    "liquidityTimeoutAction": "market",
    "manualLiquidityTimeoutAction": "market",
    "noBookCloseAction": "wait",
    "noBookOpenAction": "skip",
    "unhedgedLegAction": "retry_then_close_checked",
    "manualUnhedgedLegAction": "retry_then_close_checked",
    "autoCloseAfterFunding": true,
    "autoCloseDelaySeconds": 30,
    "defaultCloseMode": "funding",
    "defaultBasisThreshold": 0.05,
    "basisModeMaxHours": 168,
    "fundingHoldMaxHours": 24
  },
  "locked": [
    "maxOpenSlippagePct",
    "\u2026"
  ]
}

PATCH /api/v1/settings/trade

Частичное тело: присланные поля меняются, остальные — нет. Тот же обработчик, что у сайта. Значение вне диапазона приводится к границе и называется в corrections. Эхо текущего значения недоступного тарифу поля — не попытка его менять. Пишется в журнал SETTINGS_CHANGED.Partial body: sent fields change, others stay. The same handler as the site. An out-of-range value is clamped and named in corrections. Echoing the current value of a field your plan cannot change is not an attempt to change it. Written to the SETTINGS_CHANGED audit log.

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 400 — { success: false, error, errors: [{ field, code }] } — code: not_number | not_integer | not_boolean | not_string | not_allowed (+ allowed); тело не объект — error: "Invalid request body"{ success: false, error, errors: [{ field, code }] } — code: not_number | not_integer | not_boolean | not_string | not_allowed (+ allowed); body not an object — error: "Invalid request body"
  • 403 — { success: false, error, rejectedFields } — поле требует другого тарифа; ничего не сохранено{ success: false, error, rejectedFields } — the field needs another plan; nothing saved
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ЗапросRequest
{ "maxSpreadPercent": 0.8, "defaultLeverage": 5, "noBookOpenAction": "skip" }
ОтветResponse
{ "success": true, "message": "Settings saved successfully" }
{ "success": true, "message": "Settings saved with corrections: defaultLeverage 25 → 10 (allowed 1–10)",
  "corrections": [ { "field": "defaultLeverage", "from": 25, "to": 10, "min": 1, "max": 10 } ] }

GET /api/v1/settings/screener

Фильтры /api/v1/opportunities и ленты и веса формулы Score; locked — веса, если тариф их менять не даёт.Filters of /api/v1/opportunities and the feed and the Score weights; locked — the weights when your plan cannot change them.

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ОтветResponse
{
  "success": true,
  "data": {
    "minFrDiff": 0,
    "minBasis": 0,
    "minVolume": 0,
    "minScore": 0,
    "weightPnl": 0.35,
    "weightSpread": 0.2,
    "weightVolume": 0.15,
    "weightReliability": 0.15,
    "weightStability": 0.15
  },
  "locked": []
}

PATCH /api/v1/settings/screener

Частичное тело. Веса проверяются итоговым набором (сохранённые + присланные): каждый 0…1, сумма 1 ± 0.01. Фильтры и веса независимы: веса без тарифа отвергаются, а присланные с ними фильтры сохраняются (filtersSaved). Пишется в журнал SETTINGS_CHANGED.Partial body. Weights are checked as the resulting set (saved + sent): each 0…1, sum 1 ± 0.01. Filters and weights are independent: weights without the plan are refused, while filters sent with them are saved (filtersSaved). Written to the SETTINGS_CHANGED audit log.

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 400 — { success: false, message, errors: [{ field, code, min?, max?, sum? }] } — code: not_number | out_of_range | weights_sum (field: "weights"); ничего не сохранено{ success: false, message, errors: [{ field, code, min?, max?, sum? }] } — code: not_number | out_of_range | weights_sum (field: "weights"); nothing saved
  • 403 — { success: false, message, rejectedFields, filtersSaved? } — веса требуют Pro/VIP; filtersSaved: true — фильтры из того же запроса сохранены{ success: false, message, rejectedFields, filtersSaved? } — weights need Pro/VIP; filtersSaved: true — the filters from the same request were saved
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ЗапросRequest
{ "minFrDiff": 0.05, "minScore": 0.3 }
ОтветResponse
{ "success": true, "message": "Screener filters saved successfully" }

GET /api/v1/settings/options

Все поля вкладки «Опционы» (camelCase) и effectivePositionSizeUsd (только чтение) — размер, на который сервер реально считает кромку: сохранённый 0 — $1 000, выше потолка тарифа — потолок.Every field of the Options tab (camelCase) and effectivePositionSizeUsd (read-only) — the size the server actually sizes edge on: a saved 0 is $1,000, above the plan cap — the cap.

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ОтветResponse
{
  "beginnerMode": false,
  "maxPositionSizeUsd": 0,
  "effectivePositionSizeUsd": 1000,
  "maxOpenPositions": 5,
  "maxDailyLossUsd": 0,
  "maxPortfolioVegaUsd": 0,
  "maxPortfolioGammaUsd": 0,
  "maxPortfolioDeltaUsd": 0,
  "minOiPerLeg": 50,
  "maxDailyDrawdownPct": 0,
  "maxOpenEdgeDriftPct": 30,
  "rvDivergenceThresholdPct": 50,
  "greekDriftThresholdPct": 5,
  "ivStalenessSeconds": 30,
  "autoPauseAfterLossStop": true,
  "minHoldHours": 0,
  "maxOpenSlippagePct": 30,
  "openRetryCount": 2,
  "maxCloseSlippagePct": 30,
  "closeRetryCount": 3,
  "closeRetryDelayMs": 5000,
  "allowPartialClose": true,
  "unhedgedLegAction": "retry_then_close_checked",
  "notifInApp": true,
  "notifEmailDaily": false,
  "notifTelegram": false,
  "notifStrong": true,
  "notifPositionOpened": true,
  "notifPositionClosed": true,
  "notifPinRisk": true
}

PATCH /api/v1/settings/options

Частичное тело; поля проверяются по порядку таблицы, первое негодное — отказ, и ничего не сохраняется. Незнакомые поля пропускаются. Успех — 204 без тела. Пишется в журнал SETTINGS_CHANGED.Partial body; fields are checked in the table order, the first bad one refuses the request and nothing is saved. Unknown fields are ignored. Success — 204, no body. Written to the SETTINGS_CHANGED audit log.

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 400 — { error, detail, field, tierCapUsd? } — error: код поля из таблицы (например max_open_positions_out_of_range), invalid_type, position_size_below_floor, position_size_above_tier_cap (+ tierCapUsd), unhedged_leg_action_invalid, invalid_body{ error, detail, field, tierCapUsd? } — error: the field code from the table (e.g. max_open_positions_out_of_range), invalid_type, position_size_below_floor, position_size_above_tier_cap (+ tierCapUsd), unhedged_leg_action_invalid, invalid_body
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ЗапросRequest
{ "maxPositionSizeUsd": 2000, "maxOpenSlippagePct": 25, "unhedgedLegAction": "close_checked" }
ОтветResponse
204 No Content

GET /api/v1/bot/settings

Настройки бота, поля торговли, которые бот использует (меняются через PATCH /api/v1/settings/trade), биржи с правом тарифа и ключами, доступ по тарифу, 2FA, глобальный стоп, дневной лимит тарифа.Bot settings, the trade fields the bot uses (changed via PATCH /api/v1/settings/trade), venues with plan access and keys, plan access, 2FA, the global stop, the plan's daily limit.

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ОтветResponse
Показать весь ответShow the full answer
{
  "settings": {
    "enabled": false,
    "mode": "paper",
    "exchanges": [],
    "symbolsAllow": [],
    "symbolsDeny": [],
    "positionSizeUsd": 25,
    "maxOpenPositions": 3,
    "maxTotalNotionalUsd": 500,
    "maxNotionalPerExchangeUsd": 250,
    "maxTradesPerDay": 10,
    "dailyLossStopUsd": 25,
    "minNetProfitUsd": 0.05,
    "minNetProfitPct": 0.05,
    "minEdgePer8hPct": 0.03,
    "minVolume24hUsd": 1000000,
    "minScore": 0,
    "openWindowMinMinutes": 2,
    "openWindowMaxMinutes": 60,
    "tradingHoursUtc": [
      0,
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12,
      13,
      14,
      15,
      16,
      17,
      18,
      19,
      20,
      21,
      22,
      23
    ],
    "symbolCooldownMinutes": 60,
    "closeMode": "funding",
    "basisThreshold": null
  },
  "trading": {
    "defaultLeverage": 10,
    "autoCloseAfterFunding": true,
    "fundingHoldMaxHours": 24,
    "closeTriggerBufferSec": 5
  },
  "exchanges": [
    {
      "name": "bybit",
      "allowedByPlan": true,
      "hasKeys": true
    }
  ],
  "feature": {
    "allowed": true,
    "reason": null
  },
  "twoFactorEnabled": true,
  "globalPaused": false,
  "planDailyTradeLimit": 25
}

PATCH /api/v1/bot/settings

Частичный объект настроек. enabled и mode здесь не меняются (только POST /api/v1/bot/mode) и молча пропускаются, незнакомые поля — тоже. Любая ошибка — ничего не сохраняется. Пишется в журнал BOT_SETTINGS_CHANGED.A partial settings object. enabled and mode are not changed here (only POST /api/v1/bot/mode) and are skipped silently, unknown fields too. Any error — nothing is saved. Written to the BOT_SETTINGS_CHANGED audit log.

ЛимитLimit
60/мин на пользователя60/min per user
ПоляFields
таблица полейfield table
ОшибкиErrors
  • 400 — { success: false, errors: [{ field, code, min?, max?, allowed? }] } — code: out_of_range | invalid_type | invalid_value | must_exceed; тело не объект — field: ""{ success: false, errors: [{ field, code, min?, max?, allowed? }] } — code: out_of_range | invalid_type | invalid_value | must_exceed; body not an object — field: ""
  • 403 — { success: false, code: "feature_not_in_plan" }{ success: false, code: "feature_not_in_plan" }
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ЗапросRequest
{ "positionSizeUsd": 50, "exchanges": ["okx", "bybit"], "tradingHoursUtc": [8, 9, 10, 11, 12] }
ОтветResponse
{ "success": true, "settings": { "enabled": false, "mode": "paper", "positionSizeUsd": 50, "…": "…" } }

POST /api/v1/bot/mode

paper — наблюдение (заявок нет), live — реальные сделки. Выключить можно всегда, без кода. live требует тариф, включённую 2FA, ВЕРНЫЙ ТЕКУЩИЙ TOTP-код в code (повтор кода и перебор закрыты: тот же счётчик попыток, что у сайта), ключи хотя бы двух разрешённых бирж и отсутствие глобального стопа. Пишется в журнал BOT_MODE.paper — observation (no orders), live — real trades. Disabling always works, no code. live needs the plan, 2FA enabled, the CURRENT TOTP code in code (code replay and brute force are blocked: the same attempt counter as the site), keys of at least two allowed venues and no global stop. Written to the BOT_MODE audit log.

ЛимитLimit
60/мин на пользователя60/min per user
ПараметрыParameters
enabled — true/false; mode — paper | live; code — 6 цифр из приложения-аутентификатора (для live)enabled — true/false; mode — paper | live; code — 6 digits from the authenticator app (for live)
ОшибкиErrors
  • 400 — { success: false, code } — totp_invalid (нет, неверный или уже использованный код), no_keys, invalid_value{ success: false, code } — totp_invalid (missing, wrong or already used code), no_keys, invalid_value
  • 403 — feature_not_in_plan, two_factor_requiredfeature_not_in_plan, two_factor_required
  • 423 — bot_globally_paused — реальные открытия остановлены администраторомbot_globally_paused — real opens are stopped by the administrator
  • 429 — too_many_attempts — перебор кодов, заголовок Retry-After (или общий лимит частоты)too_many_attempts — too many codes, Retry-After header (or the general rate limit)
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
ЗапросRequest
{ "enabled": true, "mode": "live", "code": "123456" }
ОтветResponse
{ "success": true, "enabled": true, "mode": "live" }

GET /api/v1/bot/preview

Оценка текущих возможностей по вашим настройкам бота: кандидаты (до 50) с разбором чистой прибыли, статусом и причинами отказа, лимиты и счётчики. Ничего не отправляет.Evaluates current opportunities with your bot settings: candidates (up to 50) with the net-profit breakdown, status and refusal reasons, limits and counters. Sends nothing.

ЛимитLimit
60/мин на пользователя60/min per user
ОшибкиErrors
  • 403 — { success: false, code: "feature_not_in_plan" }{ success: false, code: "feature_not_in_plan" }
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ОтветResponse
{ "asOfUtc": "…", "scanAtUtc": "…", "mode": "paper", "enabled": false,
  "limits": { "openPositions": 0, "maxOpenPositions": 3, "tradesToday": 0, "maxTradesPerDay": 10, "…": "…" },
  "counts": { "total": 812, "willOpen": 1, "waiting": 7, "rejected": 804, "open": 0, "byReason": { "edge_below_min": 600 } },
  "candidates": [ { "symbol": "BTCUSDT", "longExchange": "okx", "shortExchange": "bybit", "netUsd": 0.065,
                    "status": "will_open", "reasons": [], "plannedCloseUtc": "…", "…": "…" } ] }

GET /api/v1/bot/journal

Сделки бота (наблюдение и реальные) за период, новые первыми, со статистикой за весь период.Bot trades (paper and live) over the period, newest first, with stats for the whole period.

ЛимитLimit
60/мин на пользователя60/min per user
ПараметрыParameters
days — 1…180 (7); page — ≥ 1 (1); pageSize — 1…200 (50); mode — all | paper | live (all)days — 1…180 (7); page — ≥ 1 (1); pageSize — 1…200 (50); mode — all | paper | live (all)
ОшибкиErrors
  • 400 — { success: false, code: "invalid_value" } — mode не из списка{ success: false, code: "invalid_value" } — mode not in the list
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ОтветResponse
{ "rows": [ { "id": 1, "atUtc": "…", "mode": "paper", "action": "paper_opened", "symbol": "BTCUSDT",
              "expected": { "netUsd": 0.07, "…": "…" }, "realizedNetUsd": null, "reason": null, "…": "…" } ],
  "total": 1, "page": 1, "pageSize": 50,
  "stats": { "opened": 1, "failed": 0, "closed": 0, "wins": 0, "losses": 0, "realizedNetUsd": 0, "byHourUtc": [ "…24…" ] } }

POST /api/v1/bot/backtest

Прогон бота по архиву возможностей за последние 24 ч, снимок за снимком, с лимитами и бумажным закрытием. Тело — необязательный частичный объект настроек поверх сохранённых (не сохраняется); пусто — сохранённые. Это оценка, не обещание (approximations).Runs the bot over the last 24 h of the opportunity archive, snapshot by snapshot, with the limits and paper closes. Body — an optional partial settings object on top of the saved ones (not saved); empty — the saved ones. An estimate, not a promise (approximations).

ЛимитLimit
60/мин на пользователя60/min per user
ОшибкиErrors
  • 400 — { success: false, errors: [...] } — как у PATCH /api/v1/bot/settings{ success: false, errors: [...] } — as in PATCH /api/v1/bot/settings
  • 403 — { success: false, code: "feature_not_in_plan" }{ success: false, code: "feature_not_in_plan" }
  • 401 — нет токена, токен истёк или негоден (тело пустое)no token, expired or invalid token (empty body)
  • 402 — подписка истекла: { error: "subscription_expired", plan, expiredAt, redirectTo }subscription expired: { error: "subscription_expired", plan, expiredAt, redirectTo }
  • 429 — лимит частоты, заголовок Retry-Afterrate limit, Retry-After header
ЗапросRequest
{ "minNetProfitUsd": 0.1, "symbolCooldownMinutes": 120 }
ОтветResponse
{ "fromUtc": "…", "toUtc": "…", "snapshots": 1419, "opened": 12, "netUsd": 0.84,
  "rows": [ "…" ], "approximations": [ "archive_positive_only", "spread_from_current_scan", "rates_at_entry", "no_depth_in_archive" ] }

Поля настроек торговлиTrade settings fields

GET/PATCH /api/v1/settings/trade. Поля «manual…» — для кнопок дашборда, остальные — для сделок через API и бота.GET/PATCH /api/v1/settings/trade. «manual…» fields are for the dashboard buttons, the others for trades via the API and the bot.

ПолеFieldТипTypeПо умолчаниюDefaultДопустимоAllowedТарифPlanСмыслMeaning
maxSpreadPercentnumber0.50.01 … 10 (вне — к границе, поправка в corrections)0.01 … 10 (outside — clamped, see corrections)любой активныйany active planМакс. спред bid/ask на каждой бирже при открытии через API и бота, %.Max bid/ask spread on each venue when the API or the bot opens, %.
Пример:Example: {"maxSpreadPercent": 0.5}
maxPriceDivergencePercentnumber20.01 … 20 (вне — к границе, поправка в corrections)0.01 … 20 (outside — clamped, see corrections)любой активныйany active planМакс. расхождение цены монеты между двумя биржами при открытии (API и бот), %.Max price difference of the coin between the two venues on open (API and bot), %.
Пример:Example: {"maxPriceDivergencePercent": 2}
liquiditySafetyMultipliernumber10.1 … 10 (вне — к границе, поправка в corrections)0.1 … 10 (outside — clamped, see corrections)любой активныйany active planЗапас ликвидности: объём лучшего уровня стакана ≥ размер × множитель (API и бот).Liquidity buffer: best-level book volume ≥ size × multiplier (API and bot).
Пример:Example: {"liquiditySafetyMultiplier": 1.0}
defaultLeverageinteger101 … 10 (вне — к границе, поправка в corrections)1 … 10 (outside — clamped, see corrections)любой активныйany active planПотолок плеча всех ваших сделок (ручных, API, бота). Итог = меньшее из этого, лимита биржи по монете и 10.Leverage cap for all your trades (manual, API, bot). Final = the smaller of this, the venue limit for the coin and 10.
Пример:Example: {"defaultLeverage": 5}
depthMultiplierinteger22 … 10 (вне — к границе, поправка в corrections)2 … 10 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialВо сколько раз больше уровней стакана запрашивать сверх расчётного минимума.How many times more book levels to request beyond the calculated minimum.
Пример:Example: {"depthMultiplier": 2}
maxOpenSlippagePctnumber200 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialМакс. проскальзывание при открытии, % от ожидаемой прибыли (API и бот); 0 — только лучшая цена.Max slippage on open, % of the expected profit (API and bot); 0 = best price only.
Пример:Example: {"maxOpenSlippagePct": 20}
allowPartialOpenbooleantruetrue / falsetrue / falsePro, VIP, пробныйPro, VIP, trialСтаканы не берут весь размер — открыть один раз меньшим объёмом (не ниже minPartialOpenPct), без добора (API и бот).If the books cannot take the full size, open once with what they take (not below minPartialOpenPct), no top-up (API and bot).
Пример:Example: {"allowPartialOpen": true}
minPartialOpenPctnumber201 … 100 (вне — к границе, поправка в corrections)1 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialМин. доля размера для частичного открытия, % (API и бот).Min share of the size for a partial open, % (API and bot).
Пример:Example: {"minPartialOpenPct": 20}
sizeMismatchOpenPctnumber100 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialМакс. разница количества монет между ногами после округления лотов, %; больше — не открывать (API и бот).Max coin difference between legs after lot rounding, %; above it the trade is not opened (API and bot).
Пример:Example: {"sizeMismatchOpenPct": 10}
openRetryCountinteger10 … 5 (вне — к границе, поправка в corrections)0 … 5 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПовторы открытия при ошибке биржи (API и бот).Open retries on a venue error (API and bot).
Пример:Example: {"openRetryCount": 1}
manualOpenSlippageCheckbooleantruetrue / falsetrue / falsePro, VIP, пробныйPro, VIP, trialПроверять стакан (проскальзывание) перед ручным открытием.Check the book (slippage) before a manual open.
Пример:Example: {"manualOpenSlippageCheck": true}
manualMaxOpenSlippagePctnumber200 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак maxOpenSlippagePct, для ручного открытия.Same as maxOpenSlippagePct, for manual opens.
Пример:Example: {"manualMaxOpenSlippagePct": 20}
manualAllowPartialOpenbooleanfalsetrue / falsetrue / falsePro, VIP, пробныйPro, VIP, trialКак allowPartialOpen, для ручного открытия.Same as allowPartialOpen, for manual opens.
Пример:Example: {"manualAllowPartialOpen": false}
manualMaxSpreadPctnumber10.01 … 10 (вне — к границе, поправка в corrections)0.01 … 10 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак maxSpreadPercent, для ручного открытия.Same as maxSpreadPercent, for manual opens.
Пример:Example: {"manualMaxSpreadPct": 1}
manualMaxDivergencePctnumber30.01 … 20 (вне — к границе, поправка в corrections)0.01 … 20 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак maxPriceDivergencePercent, для ручного открытия.Same as maxPriceDivergencePercent, for manual opens.
Пример:Example: {"manualMaxDivergencePct": 3}
manualLiquidityMultipliernumber10.1 … 10 (вне — к границе, поправка в corrections)0.1 … 10 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак liquiditySafetyMultiplier, для ручного открытия.Same as liquiditySafetyMultiplier, for manual opens.
Пример:Example: {"manualLiquidityMultiplier": 1.0}
manualMinPartialOpenPctnumber201 … 100 (вне — к границе, поправка в corrections)1 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак minPartialOpenPct, для ручного открытия.Same as minPartialOpenPct, for manual opens.
Пример:Example: {"manualMinPartialOpenPct": 20}
manualSizeMismatchOpenPctnumber100 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак sizeMismatchOpenPct, для ручного открытия.Same as sizeMismatchOpenPct, for manual opens.
Пример:Example: {"manualSizeMismatchOpenPct": 10}
manualOpenRetryCountinteger20 … 5 (вне — к границе, поправка в corrections)0 … 5 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак openRetryCount, для ручного открытия.Same as openRetryCount, for manual opens.
Пример:Example: {"manualOpenRetryCount": 2}
maxOpenTimeSecinteger305 … 300 (вне — к границе, поправка в corrections)5 … 300 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПредел подготовки открытия (проверки до отправки заявок), с — API и бот; после отправки тайм-аута нет.Limit for preparing an open (checks before the orders are sent), s — API and bot; no timeout after sending.
Пример:Example: {"maxOpenTimeSec": 30}
manualMaxOpenTimeSecinteger155 … 300 (вне — к границе, поправка в corrections)5 … 300 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак maxOpenTimeSec, для ручного открытия.Same as maxOpenTimeSec, for manual opens.
Пример:Example: {"manualMaxOpenTimeSec": 15}
closeRetryAttemptsinteger21 … 10 (вне — к границе, поправка в corrections)1 … 10 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПопытки отправки заявки закрытия по каждой ноге, первая включительно (API, бот, мониторы).Close order send attempts per leg, the first one included (API, bot, monitors).
Пример:Example: {"closeRetryAttempts": 2}
positionSizeMismatchTolerancenumber20 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialДопустимая разница размеров лонга и шорта при закрытии, % (API и бот).Allowed long/short size difference when closing, % (API and bot).
Пример:Example: {"positionSizeMismatchTolerance": 2}
closeRetryDelaySecondsinteger30 … 60 (вне — к границе, поправка в corrections)0 … 60 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПауза между попытками закрытия, с (API и бот).Pause between close attempts, s (API and bot).
Пример:Example: {"closeRetryDelaySeconds": 3}
closeTriggerBufferSecnumber50 … 300 (вне — к границе, поправка в corrections)0 … 300 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialЗадержка закрытия после времени выплаты фандинга, с (можно дробное) — одна на ручные, API- и бот-позиции.Close delay after the funding time, s (decimals allowed) — the only delay for manual, API and bot positions.
Пример:Example: {"closeTriggerBufferSec": 5.5}
maxCloseSlippagePctnumber300 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialМакс. проскальзывание при закрытии, % от прибыли (API и бот).Max slippage on close, % of the profit (API and bot).
Пример:Example: {"maxCloseSlippagePct": 30}
allowPartialClosebooleantruetrue / falsetrue / falsePro, VIP, пробныйPro, VIP, trialРазрешить закрывать частями, если ликвидности не хватает (API и бот).Allow closing in parts when liquidity is short (API and bot).
Пример:Example: {"allowPartialClose": true}
minPartialClosePctnumber201 … 100 (вне — к границе, поправка в corrections)1 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialМин. доля позиции, закрываемая за раз, % (API и бот).Min share of the position closed at once, % (API and bot).
Пример:Example: {"minPartialClosePct": 20}
slippageWaitMaxMininteger101 … 60 (вне — к границе, поправка в corrections)1 … 60 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialСколько ждать ликвидности при закрытии, мин; дальше — liquidityTimeoutAction (API и бот).How long to wait for liquidity on close, min; then liquidityTimeoutAction applies (API and bot).
Пример:Example: {"slippageWaitMaxMin": 10}
closeRetryCountinteger20 … 5 (вне — к границе, поправка в corrections)0 … 5 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПовторы всей процедуры закрытия после сбоя (API и бот): до (это + 1) × closeRetryAttempts заявок на ногу.Repeats of the whole close procedure after a failure (API and bot): up to (this + 1) × closeRetryAttempts orders per leg.
Пример:Example: {"closeRetryCount": 2}
manualCloseSlippageCheckbooleantruetrue / falsetrue / falsePro, VIP, пробныйPro, VIP, trialПроверять стакан перед ручным закрытием.Check the book before a manual close.
Пример:Example: {"manualCloseSlippageCheck": true}
manualMaxCloseSlippagePctnumber300 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак maxCloseSlippagePct, для ручного закрытия.Same as maxCloseSlippagePct, for manual closes.
Пример:Example: {"manualMaxCloseSlippagePct": 30}
manualAllowPartialClosebooleanfalsetrue / falsetrue / falsePro, VIP, пробныйPro, VIP, trialКак allowPartialClose, для ручного закрытия.Same as allowPartialClose, for manual closes.
Пример:Example: {"manualAllowPartialClose": false}
manualSlippageWaitMaxMininteger21 … 10 (вне — к границе, поправка в corrections)1 … 10 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак slippageWaitMaxMin, для ручного закрытия, мин.Same as slippageWaitMaxMin, for manual closes, min.
Пример:Example: {"manualSlippageWaitMaxMin": 2}
manualCloseRetryAttemptsinteger21 … 10 (вне — к границе, поправка в corrections)1 … 10 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак closeRetryAttempts, для ручного закрытия.Same as closeRetryAttempts, for manual closes.
Пример:Example: {"manualCloseRetryAttempts": 2}
manualSizeMismatchClosePctnumber20 … 100 (вне — к границе, поправка в corrections)0 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак positionSizeMismatchTolerance, для ручного закрытия, %.Same as positionSizeMismatchTolerance, for manual closes, %.
Пример:Example: {"manualSizeMismatchClosePct": 2}
manualRetryDelaySecinteger30 … 60 (вне — к границе, поправка в corrections)0 … 60 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак closeRetryDelaySeconds, для ручного закрытия, с.Same as closeRetryDelaySeconds, for manual closes, s.
Пример:Example: {"manualRetryDelaySec": 3}
manualMinPartialClosePctnumber201 … 100 (вне — к границе, поправка в corrections)1 … 100 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак minPartialClosePct, для ручного закрытия.Same as minPartialClosePct, for manual closes.
Пример:Example: {"manualMinPartialClosePct": 20}
manualCloseRetryCountinteger20 … 5 (вне — к границе, поправка в corrections)0 … 5 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialКак closeRetryCount, для ручного закрытия.Same as closeRetryCount, for manual closes.
Пример:Example: {"manualCloseRetryCount": 2}
liquidityTimeoutActionstring"market"market | keep_waiting | notify_stopmarket | keep_waiting | notify_stopPro, VIP, пробныйPro, VIP, trialОжидание ликвидности при закрытии истекло (API, бот, мониторы): market — по рынку; keep_waiting — ждать дальше и сообщить; notify_stop — прекратить автозакрытие и сообщить (позиция остаётся в хедже).The liquidity wait on close ran out (API, bot, monitors): market — close at market; keep_waiting — keep waiting and notify; notify_stop — stop auto-closing and notify (the position stays hedged).
Пример:Example: {"liquidityTimeoutAction": "keep_waiting"}
manualLiquidityTimeoutActionstring"market"market | keep_waiting | notify_stopmarket | keep_waiting | notify_stopPro, VIP, пробныйPro, VIP, trialКак liquidityTimeoutAction, для ручного закрытия.Same as liquidityTimeoutAction, for manual closes.
Пример:Example: {"manualLiquidityTimeoutAction": "market"}
noBookCloseActionstring"wait"wait | marketwait | marketPro, VIP, пробныйPro, VIP, trialСтакан при закрытии не пришёл (API, бот, мониторы): wait — ждать его до конца ожидания ликвидности; market — сразу по рынку без проверки.No order book on close (API, bot, monitors): wait — wait for it until the liquidity wait ends; market — close at market at once, unchecked.
Пример:Example: {"noBookCloseAction": "wait"}
noBookOpenActionstring"skip"skip | open_uncheckedskip | open_uncheckedPro, VIP, пробныйPro, VIP, trialСтакан при открытии не пришёл (API и бот): skip — не открывать (отказ no_orderbook); open_unchecked — открыть без проверки проскальзывания.No order book on open (API and bot): skip — do not open (no_orderbook refusal); open_unchecked — open without the slippage check.
Пример:Example: {"noBookOpenAction": "skip"}
unhedgedLegActionstring"retry_then_close_checked"retry_then_close_checked | close_checked | close_market | wait_notifyretry_then_close_checked | close_checked | close_market | wait_notifyPro, VIP, пробныйPro, VIP, trialОткрылась только одна нога (API и бот): retry_then_close_checked — один повтор чисто отклонённой ноги, иначе закрыть с проверкой стакана; close_checked — закрыть с проверкой стакана; close_market — сразу по рынку; wait_notify — не закрывать, сообщить.Only one leg opened (API and bot): retry_then_close_checked — one retry of a cleanly rejected leg, else close with the book check; close_checked — close with the book check; close_market — close at market at once; wait_notify — do not close, notify.
Пример:Example: {"unhedgedLegAction": "close_checked"}
manualUnhedgedLegActionstring"retry_then_close_checked"retry_then_close_checked | close_checked | close_market | wait_notifyretry_then_close_checked | close_checked | close_market | wait_notifyPro, VIP, пробныйPro, VIP, trialКак unhedgedLegAction, для ручного открытия.Same as unhedgedLegAction, for manual opens.
Пример:Example: {"manualUnhedgedLegAction": "retry_then_close_checked"}
autoCloseAfterFundingbooleantruetrue / falsetrue / falsePro, VIP, пробныйPro, VIP, trialtrue — закрыть после первой выгодной выплаты; false — держать, пока выплаты выгодны, не дольше fundingHoldMaxHours.true — close after the first profitable payment; false — hold while payments are profitable, no longer than fundingHoldMaxHours.
Пример:Example: {"autoCloseAfterFunding": true}
autoCloseDelaySecondsinteger300 … 300 (вне — к границе, поправка в corrections)0 … 300 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialУстаревший синоним closeTriggerBufferSec в целых секундах: пишет ту же задержку, если closeTriggerBufferSec нет в том же запросе.Deprecated synonym of closeTriggerBufferSec in whole seconds: sets the same delay unless closeTriggerBufferSec is in the same request.
Пример:Example: {"autoCloseDelaySeconds": 5}
defaultCloseModestring"funding"funding | basis (иное значение сохраняется как funding)funding | basis (anything else is saved as funding)Pro, VIP, пробныйPro, VIP, trialРежим закрытия по умолчанию для API и бота, когда он не указан: funding — после выплаты; basis — по схождению базиса.Default close mode for the API and the bot when none is given: funding — after the payment; basis — on basis convergence.
Пример:Example: {"defaultCloseMode": "basis"}
defaultBasisThresholdnumber0.050 … 10 (вне — к границе, поправка в corrections)0 … 10 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПорог режима basis: закрыть, когда спред цен ниже этого значения, %.Basis-mode threshold: close when the price spread drops below this, %.
Пример:Example: {"defaultBasisThreshold": 0.05}
basisModeMaxHoursinteger1681 … 720 (вне — к границе, поправка в corrections)1 … 720 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПредел удержания позиции в режиме basis, ч (168 = 7 дней).Holding limit for basis-mode positions, h (168 = 7 days).
Пример:Example: {"basisModeMaxHours": 168}
fundingHoldMaxHoursinteger241 … 168 (вне — к границе, поправка в corrections)1 … 168 (outside — clamped, see corrections)Pro, VIP, пробныйPro, VIP, trialПредел удержания фандинговой позиции и горизонт поиска выгодной выплаты при открытии, ч.Holding limit of a funding position and the horizon for a profitable payment at opening, h.
Пример:Example: {"fundingHoldMaxHours": 24}

Поля фильтров скринера и весов ScoreScreener filter and Score weight fields

GET/PATCH /api/v1/settings/screener.GET/PATCH /api/v1/settings/screener.

ПолеFieldТипTypeПо умолчаниюDefaultДопустимоAllowedТарифPlanСмыслMeaning
minFrDiffnumber0≥ 0≥ 0любой активныйany active planМин. разница ставок фандинга, приведённая к 8 ч, %/8ч; 0 — выкл. Действует на /api/v1/opportunities и ленту.Min funding edge normalised to 8 h, %/8h; 0 = off. Applies to /api/v1/opportunities and the feed.
Пример:Example: {"minFrDiff": 0.05}
minBasisnumber0-100 … 100-100 … 100любой активныйany active planМин. базис входа, % от ноги (может быть отрицательным); 0 — выкл.Min entry basis, % of the leg (may be negative); 0 = off.
Пример:Example: {"minBasis": -0.5}
minVolumenumber0≥ 0≥ 0любой активныйany active planМин. оборот за 24 ч у более тонкой ноги, $; 0 — выкл.Min 24h volume of the thinner leg, $; 0 = off.
Пример:Example: {"minVolume": 1000000}
minScorenumber00 … 10 … 1любой активныйany active planМин. Score (доля 0…1, по вашим весам); 0 — выкл.Min Score (share 0…1, with your weights); 0 = off.
Пример:Example: {"minScore": 0.3}
weightPnlnumber0.350 … 1; сумма весов = 10 … 1; weights sum to 1Pro, VIP, пробныйPro, VIP, trialВес чистой прибыли в Score. Веса — каждый 0…1, сумма 1 (±0.01): проверяется итог (сохранённые + присланные).Weight of net profit in the Score. Weights: each 0…1, sum 1 (±0.01), checked on the result (saved + sent).
Пример:Example: {"weightPnl": 0.35}
weightSpreadnumber0.20 … 1; сумма весов = 10 … 1; weights sum to 1Pro, VIP, пробныйPro, VIP, trialВес стоимости входа (спреда) в Score.Weight of the entry cost (spread) in the Score.
Пример:Example: {"weightSpread": 0.20}
weightVolumenumber0.150 … 1; сумма весов = 10 … 1; weights sum to 1Pro, VIP, пробныйPro, VIP, trialВес ликвидности в Score.Weight of liquidity in the Score.
Пример:Example: {"weightVolume": 0.15}
weightReliabilitynumber0.150 … 1; сумма весов = 10 … 1; weights sum to 1Pro, VIP, пробныйPro, VIP, trialВес надёжности бирж (uptime) в Score.Weight of venue reliability (uptime) in the Score.
Пример:Example: {"weightReliability": 0.15}
weightStabilitynumber0.150 … 1; сумма весов = 10 … 1; weights sum to 1Pro, VIP, пробныйPro, VIP, trialВес стабильности ставок в Score.Weight of funding-rate stability in the Score.
Пример:Example: {"weightStability": 0.15}

Поля настроек опционовOptions settings fields

GET/PATCH /api/v1/settings/options. Проверка идёт по порядку этой таблицы; первое негодное поле — отказ 400 с его кодом. Значение не того JSON-типа — invalid_type.GET/PATCH /api/v1/settings/options. Checked in this table's order; the first bad field is refused with 400 and its code. A value of the wrong JSON type — invalid_type.

ПолеFieldТипTypeПо умолчаниюDefaultДопустимоAllowedТарифPlanСмыслMeaning
beginnerModebooleanfalsetrue / falsetrue / falseлюбой активныйany active planРежим новичка (упрощённый список стратегий). Сохраняется; интерфейс его пока не применяет.Beginner mode (simplified strategy list). Saved; the interface does not apply it yet.
Пример:Example: {"beginnerMode": false}
maxPositionSizeUsdnumber00 (= $1 000) или 100 … потолок тарифа; отказ: position_size_below_floor | position_size_above_tier_cap0 (= $1,000) or 100 … plan cap; refusal: position_size_below_floor | position_size_above_tier_capлюбой активныйany active planРазмер позиции по умолчанию, $: по нему скринер считает кромку и ROC и заполняет окно сделки. Выше потолка тарифа — отказ с tierCapUsd.Default position size, $: the screener sizes edge and ROC on it and pre-fills the trade window. Above the plan cap — refusal with tierCapUsd.
Пример:Example: {"maxPositionSizeUsd": 2000}
maxOpenPositionsinteger5[0 … 100]; отказ: max_open_positions_out_of_range[0 … 100]; refusal: max_open_positions_out_of_rangeлюбой активныйany active planМакс. одновременно открытых опционных сделок.Max simultaneously open options trades.
Пример:Example: {"maxOpenPositions": 5}
maxDailyLossUsdnumber0[0 … 10 000 000]; отказ: max_daily_loss_usd_out_of_range[0 … 10 000 000]; refusal: max_daily_loss_usd_out_of_rangeлюбой активныйany active planДневной стоп по убытку, $; 0 — выкл.Daily loss stop, $; 0 = off.
Пример:Example: {"maxDailyLossUsd": 500}
maxPortfolioVegaUsdnumber0[0 … 1 000 000]; отказ: max_portfolio_vega_usd_out_of_range[0 … 1 000 000]; refusal: max_portfolio_vega_usd_out_of_rangeлюбой активныйany active planПотолок веги портфеля, $; 0 — выкл.Portfolio vega cap, $; 0 = off.
Пример:Example: {"maxPortfolioVegaUsd": 1000}
maxPortfolioGammaUsdnumber0[0 … 1 000 000]; отказ: max_portfolio_gamma_usd_out_of_range[0 … 1 000 000]; refusal: max_portfolio_gamma_usd_out_of_rangeлюбой активныйany active planПотолок гаммы портфеля, $; 0 — выкл.Portfolio gamma cap, $; 0 = off.
Пример:Example: {"maxPortfolioGammaUsd": 0}
maxPortfolioDeltaUsdnumber0[0 … 1 000 000]; отказ: max_portfolio_delta_usd_out_of_range[0 … 1 000 000]; refusal: max_portfolio_delta_usd_out_of_rangeлюбой активныйany active planПотолок дельты портфеля, $; 0 — выкл.Portfolio delta cap, $; 0 = off.
Пример:Example: {"maxPortfolioDeltaUsd": 0}
minOiPerLegnumber50[0 … 100 000]; отказ: min_oi_per_leg_out_of_range[0 … 100 000]; refusal: min_oi_per_leg_out_of_rangeлюбой активныйany active planМин. открытый интерес каждой ноги, контракты в BTC-эквиваленте.Min open interest of each leg, BTC-equivalent contracts.
Пример:Example: {"minOiPerLeg": 50}
maxDailyDrawdownPctinteger0[0 … 50]; отказ: max_daily_drawdown_pct_out_of_range[0 … 50]; refusal: max_daily_drawdown_pct_out_of_rangeлюбой активныйany active planДневная просадка капитала, %, после которой новые сделки не открываются; 0 — выкл.Daily equity drawdown, %, after which no new trades open; 0 = off.
Пример:Example: {"maxDailyDrawdownPct": 10}
maxOpenEdgeDriftPctinteger30[0 … 50]; отказ: edge_drift_pct_out_of_range[0 … 50]; refusal: edge_drift_pct_out_of_rangeлюбой активныйany active planОтказ открытия, если середина стакана ноги ушла больше чем на этот % с момента сигнала; 0 — выкл.Refuse the open if a leg's book mid moved more than this % since the signal; 0 = off.
Пример:Example: {"maxOpenEdgeDriftPct": 30}
rvDivergenceThresholdPctinteger500 (выкл) или [10 … 200]; отказ: rv_divergence_pct_out_of_range0 (off) or [10 … 200]; refusal: rv_divergence_pct_out_of_rangeлюбой активныйany active planМягкая проверка: расхождение IV с 14-дневной реализованной волатильностью больше этого % понижает уверенность сигнала; 0 — выкл.Soft check: IV vs 14-day realised volatility divergence above this % lowers the signal confidence; 0 = off.
Пример:Example: {"rvDivergenceThresholdPct": 50}
greekDriftThresholdPctnumber50 (выкл) или [1 … 50]; отказ: greek_drift_pct_out_of_range0 (off) or [1 … 50]; refusal: greek_drift_pct_out_of_rangeлюбой активныйany active planСверка дельты биржи с моделью Блэка–Шоулза: расхождение больше этого % — метка; 0 — выкл.Venue delta vs Black–Scholes cross-check: a divergence above this % is flagged; 0 = off.
Пример:Example: {"greekDriftThresholdPct": 5}
ivStalenessSecondsinteger300 (выкл) или [5 … 300]; отказ: iv_staleness_seconds_out_of_range0 (off) or [5 … 300]; refusal: iv_staleness_seconds_out_of_rangeлюбой активныйany active planIV старше этого числа секунд считается устаревшей; 0 — выкл.IV older than this many seconds counts as stale; 0 = off.
Пример:Example: {"ivStalenessSeconds": 30}
autoPauseAfterLossStopbooleantruetrue / falsetrue / falseлюбой активныйany active planПауза после дневного стопа. Сохраняется; сейчас стоп просто запрещает новые открытия.Pause after the daily stop. Saved; today the stop simply refuses new opens.
Пример:Example: {"autoPauseAfterLossStop": true}
minHoldHoursinteger0[0 … 720]; отказ: min_hold_hours_out_of_range[0 … 720]; refusal: min_hold_hours_out_of_rangeлюбой активныйany active planМин. время удержания, ч: закрытие раньше — отказ close_too_early; 0 — выкл.Min holding time, h: an earlier close is refused with close_too_early; 0 = off.
Пример:Example: {"minHoldHours": 0}
maxOpenSlippagePctnumber30(0 … 100]; отказ: max_open_slippage_pct_out_of_range(0 … 100]; refusal: max_open_slippage_pct_out_of_rangeлюбой активныйany active planДопуск открытия, % от середины живого стакана ноги: лимит заявки = середина × (1 ± допуск).Open tolerance, % of the leg's live book mid: order limit = mid × (1 ± tolerance).
Пример:Example: {"maxOpenSlippagePct": 30}
openRetryCountinteger2[0 … 10]; отказ: open_retry_count_out_of_range[0 … 10]; refusal: open_retry_count_out_of_rangeлюбой активныйany active planПовторы открывающей заявки после отказа биржи по цене, шагу или лимиту запросов.Retries of an opening order after a venue refusal on price, tick or rate limit.
Пример:Example: {"openRetryCount": 2}
maxCloseSlippagePctnumber30(0 … 100]; отказ: max_close_slippage_pct_out_of_range(0 … 100]; refusal: max_close_slippage_pct_out_of_rangeлюбой активныйany active planДопуск закрытия, % от середины живого стакана ноги.Close tolerance, % of the leg's live book mid.
Пример:Example: {"maxCloseSlippagePct": 30}
closeRetryCountinteger3[0 … 10]; отказ: close_retry_count_out_of_range[0 … 10]; refusal: close_retry_count_out_of_rangeлюбой активныйany active planПовторы закрывающей заявки (и отката межбиржевой ноги).Retries of a closing order (and of a cross-venue leg rollback).
Пример:Example: {"closeRetryCount": 3}
closeRetryDelayMsinteger5000[0 … 60 000]; отказ: close_retry_delay_ms_out_of_range[0 … 60 000]; refusal: close_retry_delay_ms_out_of_rangeлюбой активныйany active planПауза между повторами закрытия, мс.Pause between close retries, ms.
Пример:Example: {"closeRetryDelayMs": 5000}
allowPartialClosebooleantruetrue / falsetrue / falseлюбой активныйany active planСтакан в допуске не вмещает всё закрытие — закрыть вмещающуюся долю (иначе отказ без заявок).If the book within tolerance cannot take the whole close, close the share it takes (otherwise refuse, no orders).
Пример:Example: {"allowPartialClose": true}
unhedgedLegActionstring"retry_then_close_checked"retry_then_close_checked | close_checked | close_market | wait_notify; отказ: unhedged_leg_action_invalidretry_then_close_checked | close_checked | close_market | wait_notify; refusal: unhedged_leg_action_invalidлюбой активныйany active planГолая опционная нога (открытие развалилось, откат, сверка): retry_then_close_checked — один повтор чисто отклонённой ноги, иначе как close_checked; close_checked — закрыть по стакану в допуске; close_market — агрессивный IOC по худшему нужному уровню без допуска (рынка у опционов нет); wait_notify — держать и уведомлять.An unhedged options leg (failed open, rollback, reconciliation): retry_then_close_checked — one retry of a cleanly rejected leg, else as close_checked; close_checked — close by the book within tolerance; close_market — aggressive IOC at the worst needed level, no tolerance (options have no market orders); wait_notify — hold and notify.
Пример:Example: {"unhedgedLegAction": "close_checked"}
notifInAppbooleantruetrue / falsetrue / falseлюбой активныйany active planУведомления в приложении. Сохраняется; рассылка ещё не подключена.In-app notifications. Saved; delivery is not wired yet.
Пример:Example: {"notifInApp": true}
notifEmailDailybooleanfalsetrue / falsetrue / falseлюбой активныйany active planЕжедневная сводка на почту. Сохраняется; рассылка ещё не подключена.Daily e-mail digest. Saved; delivery is not wired yet.
Пример:Example: {"notifEmailDaily": false}
notifTelegrambooleanfalsetrue / falsetrue / falseлюбой активныйany active planУведомления в Telegram. Сохраняется; рассылка ещё не подключена.Telegram notifications. Saved; delivery is not wired yet.
Пример:Example: {"notifTelegram": false}
notifStrongbooleantruetrue / falsetrue / falseлюбой активныйany active planСигналы сильных возможностей. Сохраняется; рассылка ещё не подключена.Strong-signal alerts. Saved; delivery is not wired yet.
Пример:Example: {"notifStrong": true}
notifPositionOpenedbooleantruetrue / falsetrue / falseлюбой активныйany active planУведомление об открытии позиции. Сохраняется; рассылка ещё не подключена.Position-opened alerts. Saved; delivery is not wired yet.
Пример:Example: {"notifPositionOpened": true}
notifPositionClosedbooleantruetrue / falsetrue / falseлюбой активныйany active planУведомление о закрытии позиции. Сохраняется; рассылка ещё не подключена.Position-closed alerts. Saved; delivery is not wired yet.
Пример:Example: {"notifPositionClosed": true}
notifPinRiskbooleantruetrue / falsetrue / falseлюбой активныйany active planПредупреждение о пин-риске за 24 ч до экспирации. Сохраняется; рассылка ещё не подключена.Pin-risk alert 24 h before expiry. Saved; delivery is not wired yet.
Пример:Example: {"notifPinRisk": true}

Поля настроек ботаBot settings fields

GET/PATCH /api/v1/bot/settings (и тело POST /api/v1/bot/backtest). enabled и mode — только через POST /api/v1/bot/mode.GET/PATCH /api/v1/bot/settings (and the body of POST /api/v1/bot/backtest). enabled and mode — only via POST /api/v1/bot/mode.

ПолеFieldТипTypeПо умолчаниюDefaultДопустимоAllowedТарифPlanСмыслMeaning
exchangesstring[][]из: bybit | bingx | okx | mexc | htx | gate | bitget | kucoin | xt | bitmart | coinex | hyperliquid (до 500)of: bybit | bingx | okx | mexc | htx | gate | bitget | kucoin | xt | bitmart | coinex | hyperliquid (up to 500)Pro, VIP, пробныйPro, VIP, trialРазрешённые биржи бота; [] — все, доступные по тарифу и с ключами.Venues the bot may use; [] = all allowed by the plan and with keys.
Пример:Example: {"exchanges": ["okx","bybit"]}
symbolsAllowstring[][]— (до 500)— (up to 500)Pro, VIP, пробныйPro, VIP, trialТолько эти монеты (A–Z, 0–9, до 30 знаков, до 500 штук); [] — все.Only these coins (A–Z, 0–9, up to 30 chars, up to 500 items); [] = all.
Пример:Example: {"symbolsAllow": ["BTCUSDT"]}
symbolsDenystring[][]— (до 500)— (up to 500)Pro, VIP, пробныйPro, VIP, trialНикогда эти монеты (тот же формат).Never these coins (same format).
Пример:Example: {"symbolsDeny": ["PEPEUSDT"]}
positionSizeUsdnumber255 … 10000005 … 1000000Pro, VIP, пробныйPro, VIP, trialНоминал каждой ноги сделки бота, $.Notional of each leg of a bot trade, $.
Пример:Example: {"positionSizeUsd": 25}
maxOpenPositionsinteger31 … 501 … 50Pro, VIP, пробныйPro, VIP, trialОдновременно открытых сделок бота.Simultaneously open bot trades.
Пример:Example: {"maxOpenPositions": 3}
maxTotalNotionalUsdnumber5005 … 100000005 … 10000000Pro, VIP, пробныйPro, VIP, trialСумма номиналов открытых сделок бота, $.Total notional of open bot trades, $.
Пример:Example: {"maxTotalNotionalUsd": 500}
maxNotionalPerExchangeUsdnumber2505 … 100000005 … 10000000Pro, VIP, пробныйPro, VIP, trialНоминал ног бота на одной бирже, $.Bot leg notional on one venue, $.
Пример:Example: {"maxNotionalPerExchangeUsd": 250}
maxTradesPerDayinteger101 … 10001 … 1000Pro, VIP, пробныйPro, VIP, trialОткрытий за сутки UTC (сверху — дневной лимит тарифа).Opens per UTC day (capped by the plan's daily limit).
Пример:Example: {"maxTradesPerDay": 10}
dailyLossStopUsdnumber250 … 10000000 … 1000000Pro, VIP, пробныйPro, VIP, trialИтог закрытых за сутки UTC ≤ −значения — до 00:00 UTC не открывать; 0 — выкл.When the UTC day's closed result ≤ −value, no opens until 00:00 UTC; 0 = off.
Пример:Example: {"dailyLossStopUsd": 25}
minNetProfitUsdnumber0.050 … 10000000 … 1000000Pro, VIP, пробныйPro, VIP, trialПорог чистой прибыли сделки (фандинг − комиссии − спред − проскальзывание), $.Net profit threshold of a trade (funding − fees − spread − slippage), $.
Пример:Example: {"minNetProfitUsd": 0.05}
minNetProfitPctnumber0.050 … 1000 … 100Pro, VIP, пробныйPro, VIP, trialПорог чистой прибыли, % от размера.Net profit threshold, % of the size.
Пример:Example: {"minNetProfitPct": 0.05}
minEdgePer8hPctnumber0.030 … 1000 … 100Pro, VIP, пробныйPro, VIP, trialПорог разницы ставок, %/8ч.Funding edge threshold, %/8h.
Пример:Example: {"minEdgePer8hPct": 0.03}
minVolume24hUsdnumber1000000≥ 0≥ 0Pro, VIP, пробныйPro, VIP, trialОборот за 24 ч КАЖДОЙ ноги, $ (без верхней границы).24h volume of EACH leg, $ (no upper bound).
Пример:Example: {"minVolume24hUsd": 1000000}
minScorenumber00 … 10 … 1Pro, VIP, пробныйPro, VIP, trialМин. Score скринера (0…1).Min screener Score (0…1).
Пример:Example: {"minScore": 0}
openWindowMinMinutesinteger20 … 14400 … 1440Pro, VIP, пробныйPro, VIP, trialОткрывать не позже чем за N мин до ближайшей выплаты.Open no later than N min before the nearest payment.
Пример:Example: {"openWindowMinMinutes": 2}
openWindowMaxMinutesinteger601 … 14401 … 1440Pro, VIP, пробныйPro, VIP, trial…и не раньше чем за M мин (M > N, иначе must_exceed).…and no earlier than M min before it (M > N, else must_exceed).
Пример:Example: {"openWindowMaxMinutes": 60}
tradingHoursUtcinteger[][0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]0 … 23 (до 500)0 … 23 (up to 500)Pro, VIP, пробныйPro, VIP, trialЧасы UTC, в которые разрешено открывать; пустой список — invalid_value.UTC hours in which opening is allowed; an empty list is invalid_value.
Пример:Example: {"tradingHoursUtc": [8,9,10,11,12]}
symbolCooldownMinutesinteger600 … 100800 … 10080Pro, VIP, пробныйPro, VIP, trialПауза по монете после закрытия сделки бота, мин.Per-coin pause after a bot trade closes, min.
Пример:Example: {"symbolCooldownMinutes": 60}
closeModestring"funding"funding | basisfunding | basisPro, VIP, пробныйPro, VIP, trialРежим закрытия сделок бота: funding — после выплаты; basis — по схождению базиса.Close mode of bot trades: funding — after the payment; basis — on basis convergence.
Пример:Example: {"closeMode": "funding"}
basisThresholdnumber | nullnull0 … 10; null0 … 10; nullPro, VIP, пробныйPro, VIP, trialПорог базиса для basis, %; null — defaultBasisThreshold из настроек торговли.Basis threshold for basis mode, %; null = defaultBasisThreshold from the trade settings.
Пример:Example: {"basisThreshold": null}