Гид для разработчиков · Bitfinex v2 REST API

API Bitfinex, объяснённый для кредиторов

Документация API Bitfinex описывает сотни endpoint-ов; боту для лендинга нужна примерно дюжина. Этот гид охватывает ровно их: создание API-ключа без права вывода, чтение ставок фандинга и книг через публичный API, размещение и отмена офферов фандинга через аутентифицированный API, а также лимиты запросов и особенности данных, с которыми вы столкнётесь на практике — с рабочими примерами на Python.

Пути endpoint-ов и поведение сверены с официальным API v2 Bitfinex в том виде, в каком Stratum использует его в продакшене, август 2026 года. Официальная документация Bitfinex — авторитетный источник.

Проверьте публичные endpoints

Интерактивный обозреватель API фандинга Bitfinex

Выберите endpoint и валюту и выполните реальный запрос без авторизации. Endpoint Stratum нормализует FRR, средние значения, доступный фандинг и фиксированные уровни.

https://app.stratum.money/api/v1/public/funding-rates.json
Предпросмотр ответа
{
  "generatedAt": "2026-08-23T06:48:15.408007891Z",
  "updatedAt": "2026-08-23T06:05:00Z",
  "source": "Bitfinex Public REST API",
  "currency": {
    "code": "USD",
    "bitfinexSymbol": "fUSD",
    "current": {
      "timestamp": "2026-08-23T06:05:00Z",
      "dailyRatePercent": "0.031025",
      "annualizedAprPercent": "11.324125",
      "averagePeriodDays": "91.470000",
      "fundingAmount": "5991052941.288744",
      "fundingAmountUsed": "5935309488.394312",
      "fundingAvailable": "55743452.894432",
      "fundingBelowThreshold": "763483370.5925878"
    },
    "averages": {
      "hours24": {
        "dailyRatePercent": "0.031200",
        "annualizedAprPercent": "11.388073",
        "observations": 25
      },
      "days7": {
        "dailyRatePercent": "0.031710",
        "annualizedAprPercent": "11.574020",
        "observations": 169
      },
      "days30": {
        "dailyRatePercent": "0.033403",
        "annualizedAprPercent": "12.192212",
        "observations": 721
      }
    },
    "market": {
      "bestFixedBid": {
        "dailyRatePercent": "0.027397",
        "annualizedAprPercent": "10.000000",
        "periodDays": 120,
        "amount": "11593282.43646913"
      },
      "bestFixedAsk": {
        "dailyRatePercent": "0.014188",
        "annualizedAprPercent": "5.178600",
        "periodDays": 2,
        "amount": "264.93559176"
      },
      "fixedBids": [
        {
          "dailyRatePercent": "0.027397",
          "annualizedAprPercent": "10.000000",
          "periodDays": 120,
          "amount": "11593282.43646913"
        },
        {
          "dailyRatePercent": "0.018011",
          "annualizedAprPercent": "6.574000",
          "periodDays": 120,
          "amount": "133240.73391109"
        },
        {
          "dailyRatePercent": "0.017770",
          "annualizedAprPercent": "6.486100",
          "periodDays": 120,
          "amount": "23123.30278361"
        },
        {
          "dailyRatePercent": "0.017400",
          "annualizedAprPercent": "6.351000",
          "periodDays": 120,
          "amount": "12350.0"
        },
        {
          "dailyRatePercent": "0.017130",
          "annualizedAprPercent": "6.252500",
          "periodDays": 120,
          "amount": "14000.0"
        },
        {
          "dailyRatePercent": "0.017125",
          "annualizedAprPercent": "6.250600",
          "periodDays": 117,
          "amount": "560000.0"
        },
        {
          "dailyRatePercent": "0.017120",
          "annualizedAprPercent": "6.248800",
          "periodDays": 120,
          "amount": "20000.0"
        },
        {
          "dailyRatePercent": "0.017111",
          "annualizedAprPercent": "6.245500",
          "periodDays": 120,
          "amount": "2000000.0"
        },
        {
          "dailyRatePercent": "0.016125",
          "annualizedAprPercent": "5.885600",
          "periodDays": 117,
          "amount": "560000.0"
        },
        {
          "dailyRatePercent": "0.016000",
          "annualizedAprPercent": "5.840000",
          "periodDays": 120,
          "amount": "10009162.66122322"
        },
        {
          "dailyRatePercent": "0.016000",
          "annualizedAprPercent": "5.840000",
          "periodDays": 14,
          "amount": "9306.90081316"
        },
        {
          "dailyRatePercent": "0.015111",
          "annualizedAprPercent": "5.515500",
          "periodDays": 117,
          "amount": "560000.0"
        }
      ],
      "fixedAsks": [
        {
          "dailyRatePercent": "0.014188",
          "annualizedAprPercent": "5.178600",
          "periodDays": 2,
          "amount": "264.93559176"
        },
        {
          "dailyRatePercent": "0.014190",
          "annualizedAprPercent": "5.179300",
          "periodDays": 2,
          "amount": "250.0"
        },
        {
          "dailyRatePercent": "0.014192",
          "annualizedAprPercent": "5.180100",
          "periodDays": 2,
          "amount": "200.0"
        },
        {
          "dailyRatePercent": "0.014978",
          "annualizedAprPercent": "5.467000",
          "periodDays": 2,
          "amount": "3837.92472142"
        },
        {
          "dailyRatePercent": "0.014982",
          "annualizedAprPercent": "5.468400",
          "periodDays": 2,
          "amount": "323.64921816"
        },
        {
          "dailyRatePercent": "0.014988",
          "annualizedAprPercent": "5.470600",
          "periodDays": 2,
          "amount": "605.58777224"
        },
        {
          "dailyRatePercent": "0.014998",
          "annualizedAprPercent": "5.474300",
          "periodDays": 2,
          "amount": "2079.77565528"
        },
        {
          "dailyRatePercent": "0.014999",
          "annualizedAprPercent": "5.474600",
          "periodDays": 2,
          "amount": "1968.80422628"
        },
        {
          "dailyRatePercent": "0.015047",
          "annualizedAprPercent": "5.492200",
          "periodDays": 2,
          "amount": "484.95397132"
        },
        {
          "dailyRatePercent": "0.015196",
          "annualizedAprPercent": "5.546500",
          "periodDays": 2,
          "amount": "150.0"
        },
        {
          "dailyRatePercent": "0.015418",
          "annualizedAprPercent": "5.627600",
          "periodDays": 2,
          "amount": "200.0"
        },
        {
          "dailyRatePercent": "0.015607",
          "annualizedAprPercent": "5.696500",
          "periodDays": 2,
          "amount": "1150.0"
        }
      ],
      "fixedBidDepth": "37154170.83381627",
      "fixedAskDepth": "536825.22487061",
      "frrBidDepth": "0",
      "frrOfferDepth": "0",
      "sampledLevels": 356
    },
    "historyPreview": [
      {
        "timestamp": "2026-08-23T06:05:00Z",
        "dailyRatePercent": "0.031025",
        "annualizedAprPercent": "11.324125",
        "averagePeriodDays": "91.470000",
        "fundingAmount": "5991052941.288744",
        "fundingAmountUsed": "5935309488.394312",
        "fundingAvailable": "55743452.894432",
        "fundingBelowThreshold": "763483370.5925878"
      },
      {
        "timestamp": "2026-08-23T05:05:00Z",
        "dailyRatePercent": "0.031025",
        "annualizedAprPercent": "11.324125",
        "averagePeriodDays": "92.570000",
        "fundingAmount": "5989152818.724412",
        "fundingAmountUsed": "5934084828.197341",
        "fundingAvailable": "55067990.527071",
        "fundingBelowThreshold": "769699003.4136398"
      },
      {
        "timestamp": "2026-08-23T04:05:00Z",
        "dailyRatePercent": "0.031025",
        "annualizedAprPercent": "11.324125",
        "averagePeriodDays": "92.030000",
        "fundingAmount": "5988567317.18653",
        "fundingAmountUsed": "5933880711.029357",
        "fundingAvailable": "54686606.157173",
        "fundingBelowThreshold": "769905136.1789076"
      }
    ]
  }
}

GET /v2/ticker/{symbol} · tBTCUSD / fUSD

Тикер фандинга — FRR (индекс 0, дневная ставка), лучшие bid/ask с их периодами, дневной объём. Самый полезный endpoint для лендинга.

INDEXtBTCUSDfUSD
0BIDFRR
1BID_SIZEBID
2ASKBID_PERIOD
3ASK_SIZEBID_SIZE
4CHANGEASK
5CHANGE_RELATIVEASK_PERIOD
6LAST_PRICEASK_SIZE
7VOLUMEDAILY_CHANGE
8HIGHDAILY_CHANGE_PERC
9LOWLAST_PRICE
10FIRST_TRADEVOLUME
11HIGH
12LOW
15FRR_AMOUNT_AVAILABLE
16FIRST_TRADE

REST: 90 req/min ·docs.bitfinex.com/reference/rest-public-ticker

Нулевой шаг

Создайте API-ключ с ограниченными правами (вывод отключён)

Всему, что ниже, API-ключ нужен только для аутентифицированных endpoint-ов — ставки, свечи и книги публичны. Когда будете создавать ключ (Bitfinex → API Keys → Create New Key), ограничьте его тем, что кредитору действительно нужно: Margin Funding чтение + запись (чтобы видеть и размещать офферы), Wallets чтение (чтобы видеть балансы) и Account History чтение (для леджера). Вывод, торговлю и переводы оставьте отключёнными.

Боту для фандинга никогда не нужна возможность выводить ваши деньги с биржи. Ключ без прав на вывод и торговлю в худшем случае одолжит ваш фандинговый кошелёк по плохой ставке — опустошить его он не может. Именно такое ограничение прав Stratum и требует: ключи с правом вывода или торговли отклоняются при добавлении.

Преобразование единиц ставки

Ticker, book и funding/stats используют разные единицы FRR

Ставки ticker и book — дневные доли. Поле FRR в funding/stats равно 1/365 отображаемой дневной FRR. Перед сравнением используйте правильную формулу.

ticker/book daily % = API rate × 100
ticker/book gross APR % = API rate × 365 × 100
funding/stats daily % = FRR field × 365 × 100
funding/stats gross APR % = FRR field × 365 × 365 × 100
curl https://app.stratum.money/api/v1/public/funding-rates.json
curl https://app.stratum.money/api/v1/public/funding-rates.csv
curl "https://api-pub.bitfinex.com/v2/ticker/fUSD"
curl "https://api-pub.bitfinex.com/v2/book/fUSD/P0?len=25"

Endpoint-ы, которые важны для фандинга

Публичные (без ключа, api-pub.bitfinex.com)

GET /v2/ticker/fUSD

Тикер фандинга — FRR (индекс 0, дневная ставка), лучшие bid/ask с их периодами, дневной объём. Самый полезный endpoint для лендинга.

GET /v2/candles/{key}/hist

Исторические свечи ставок фандинга по тенорам, например ключ trade:1h:fUSD:p2 для 2-дневного фандинга USD. Это ряд, на котором вы гоняете бэктесты.

GET /v2/book/fUSD/P2 и /R0

Живая книга фандинга — агрегированные ценовые уровни (P0–P3) или сырые ордера (R0). Ставка, период и размер каждого стоящего бида и оффера.

GET /v2/funding/stats/fUSD/hist

Почасовая статистика фандинга: FRR, средний период, общий используемый фандинг. Подвох: колонка FRR хранится как FRR/365 — умножьте на 365, чтобы сошлось с тикером.

Аутентифицированные (api.bitfinex.com, с подписью HMAC)

POST /v2/auth/r/wallets

Балансы кошельков, включая фандинговый кошелёк, из которого бот выдаёт займы.

POST /v2/auth/r/funding/offers/fUSD

Ваши открытые офферы фандинга; вариант /hist возвращает исполненные и отменённые.

POST /v2/auth/r/funding/credits/fUSD

Фандинг, выданный в данный момент (активные кредиты): ставка, период, время открытия. Вариант /hist — ваша история закрытых займов.

POST /v2/auth/w/funding/offer/submit

Разместить оффер фандинга: символ, сумма, дневная ставка, период (2–120 дней). Отмена через offer/cancel или offer/cancel/all.

POST /v2/auth/r/ledgers/USD/hist

Леджер — каждая выплата процентов и удержание комиссии 15%, по займу за день. Единственная корректная основа для цифр дохода и налогов.

POST /v2/auth/w/funding/keep

Управление автопродлением по каждому кредиту — API-эквивалент переключателя автопродления в интерфейсе.

Рабочий код

Примеры на Python

Читаем FRR и книгу фандинга (ключ не нужен)

import requests

PUB = "https://api-pub.bitfinex.com"

# Тикер фандинга: индекс 0 — это FRR, котируется как ДНЕВНАЯ ставка
ticker = requests.get(f"{PUB}/v2/ticker/fUSD", timeout=10).json()
frr_daily = ticker[0]
print(f"FRR: {frr_daily * 365 * 100:.2f}% APR")

# Верх живой книги фандинга (агрегированный)
book = requests.get(f"{PUB}/v2/book/fUSD/P2", params={"len": 25}, timeout=10).json()
for rate, period, count, amount in book[:5]:
    side = "offer" if amount < 0 else "bid"
    print(f"{side}: {rate * 365 * 100:.2f}% APR for {period}d, size {abs(amount):,.0f}")

Размещаем оффер фандинга (аутентифицированно)

import hashlib, hmac, json, time, requests

KEY, SECRET = "your-key", "your-secret"
BASE = "https://api.bitfinex.com"

def auth_post(path: str, body: dict):
    nonce = str(int(time.time() * 1_000_000))  # должен строго возрастать для ключа
    raw = f"/api/{path}{nonce}{json.dumps(body)}"
    sig = hmac.new(SECRET.encode(), raw.encode(), hashlib.sha384).hexdigest()
    return requests.post(f"{BASE}/{path}", data=json.dumps(body), timeout=15, headers={
        "bfx-nonce": nonce, "bfx-apikey": KEY, "bfx-signature": sig,
        "content-type": "application/json",
    }).json()

# Предлагаем $150 (минимум Bitfinex) под 0.03% в день (~10.95% APR) на 2 дня
result = auth_post("v2/auth/w/funding/offer/submit", {
    "type": "LIMIT", "symbol": "fUSD",
    "amount": "150", "rate": "0.0003", "period": 2,
})
print(result)

Ставки в API всегда дневные — умножайте на 365 для APR — и всегда грязные, до комиссии Bitfinex 15% с заработанных процентов. Минимальный оффер — эквивалент $150; периоды от 2 до 120 дней. Если вместо ручной подписи вы предпочитаете поддерживаемый клиент, Bitfinex публикует официальную Python-библиотеку (bfxapi).

Лимиты запросов и подвохи, которые стоят реальных часов

Nonce должны строго возрастать

Каждому подписанному запросу нужен bfx-nonce больше предыдущего для этого ключа. Два процесса на одном ключе будут сталкиваться с ошибками "nonce: small" — используйте по ключу на процесс.

Лимиты запросов по endpoint-ам

Публичные endpoint-ы допускают примерно 10–90 запросов в минуту в зависимости от маршрута; аутентифицированные — примерно столько же. Превышение возвращает HTTP 429 с телом ERR_RATE_LIMIT — отступайте экспоненциально и кешируйте чтения.

funding/stats хранит FRR/365

Колонка FRR в /v2/funding/stats — это дневной FRR, делённый на 365, тогда как /v2/ticker котирует дневную ставку напрямую. Умножайте значение из stats на 365 перед сравнением — иначе это незаметно искажает бэктесты.

Всё указано до комиссий

Ставки книги, свечи и FRR — все до комиссии. Ваш кошелёк получает 85% заработанных процентов (82% для скрытых офферов). Сверяйтесь с леджером, а не с котируемой ставкой.

Займы закрываются досрочно

120-дневный кредит не означает 120 дней процентов — заёмщики гасят долг, когда закрывают позиции, и кредиты могут вернуться за считанные дни. Моделируйте ожидаемый срок удержания, а не номинальный период.

Строить или запускать

Если вы предпочитаете не запускать это сами

Всё описанное выше — то, что Stratum эксплуатирует в продакшене: те же endpoint-ы, подпись, backoff и сверка с леджером, плюс 11 протестированных на истории стратегий на трёх годах свечей фандинга, бумажный режим и налоговые экспорты — за ключом без права вывода, с правами ровно как описано в нулевом шаге. Стройте своего бота, если вам нравится владеть стеком (этот гид плюс опенсорсные проекты — реальный путь); используйте хостируемый, если предпочитаете обойтись без багов с nonce и 429-х в 3 часа ночи.

FAQ по API Bitfinex

Какие права API нужны боту для лендинга на Bitfinex?

Margin Funding чтение и запись, Wallets чтение и Account History чтение. Вывод, торговля и переводы должны оставаться отключёнными — боту для лендинга никогда не нужно выводить средства с биржи, а ключ с ограниченными правами уменьшает ущерб, если он когда-нибудь утечёт.

API Bitfinex бесплатный?

Да. И публичный API (ставки, свечи, книги), и аутентифицированный (офферы, кошельки, леджеры) бесплатны; для аутентифицированной части нужны только аккаунт и API-ключ. Публичным endpoint-ам на api-pub.bitfinex.com ключ вообще не нужен.

Есть ли официальная Python-библиотека Bitfinex?

Да — bfxapi, опубликованная Bitfinex, покрывает и REST, и WebSocket. Примеры на этой странице используют голый requests плюс ручную подпись HMAC, чтобы вы видели ровно то, что происходит на проводе; в продакшен-коде официальная библиотека экономит шаблонный код.

Ставки API Bitfinex дневные или годовые?

Дневные. Ставка 0.0003 означает 0.03% в день, примерно 10.95% простого APR. Умножайте на 365 для APR и помните, что каждая котируемая ставка — грязная: Bitfinex оставляет себе 15% заработанных процентов, так что умножьте на 0.85, чтобы получить то, что дойдёт до вашего кошелька.

Нужен ли WebSocket API для бота лендинга?

Не для начала. Опрос через REST покрывает простого бота. WebSocket (wss://api-pub.bitfinex.com/ws/2 публичный, wss://api.bitfinex.com/ws/2 аутентифицированный) важен, когда вам нужны живые обновления книги или мгновенные уведомления об исполнении без сжигания лимита REST-запросов — именно так Stratum отслеживает события кошелька, офферов и кредитов в реальном времени.

Каковы лимиты запросов API Bitfinex?

Они различаются по endpoint-ам: примерно 10–90 запросов в минуту на публичных маршрутах и сопоставимые бюджеты на аутентифицированных. Превышение лимита возвращает HTTP 429 (ERR_RATE_LIMIT); воспитанные клиенты кешируют публичные чтения и экспоненциально отступают при 429. Точные цифры перечислены по каждому endpoint-у в официальной документации.

API — это лёгкая часть

Разместить оффер — двадцать строк Python; знать, какую ставку и тенор предложить — вот настоящая задача. Stratum гоняет протестированные на истории стратегии на том же API, что описан выше — или возьмите код с этой страницы и постройте своего.

Добавьте API-ключ в StratumЖивые ставки фандингаОткрыть книгу фандинга Bitfinex онлайнСравнение опенсорсных ботовДатасеты Bitfinex fundingВиджет ставок Bitfinex в реальном времени