La API de Bitfinex, explicada para prestamistas
La documentación de la API de Bitfinex cubre cientos de endpoints; un bot de lending necesita apenas una docena. Esta guía cubre exactamente esos: crear una API key sin permiso de retiro, leer tasas de funding y libros desde la API pública, colocar y cancelar ofertas de funding a través de la API autenticada, y los límites de peticiones y peculiaridades de los datos con los que te toparás en la práctica — con ejemplos funcionales en Python.
Rutas de endpoints y comportamiento verificados contra la API v2 oficial de Bitfinex tal como Stratum la usa en producción, agosto de 2026. La documentación oficial de Bitfinex es la referencia autorizada.
Explorador en vivo de la API de funding Bitfinex
Elige endpoint y moneda y ejecuta una solicitud real sin autenticación. El endpoint de Stratum normaliza FRR, promedios, funding disponible y niveles fijos.
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
Ticker de funding — el FRR (índice 0, una tasa diaria), mejor bid/ask con sus períodos, volumen diario. El endpoint de lending más útil de todos.
| INDEX | tBTCUSD | fUSD |
|---|---|---|
| 0 | BID | FRR |
| 1 | BID_SIZE | BID |
| 2 | ASK | BID_PERIOD |
| 3 | ASK_SIZE | BID_SIZE |
| 4 | CHANGE | ASK |
| 5 | CHANGE_RELATIVE | ASK_PERIOD |
| 6 | LAST_PRICE | ASK_SIZE |
| 7 | VOLUME | DAILY_CHANGE |
| 8 | HIGH | DAILY_CHANGE_PERC |
| 9 | LOW | LAST_PRICE |
| 10 | FIRST_TRADE | VOLUME |
| 11 | — | HIGH |
| 12 | — | LOW |
| 15 | — | FRR_AMOUNT_AVAILABLE |
| 16 | — | FIRST_TRADE |
REST: 90 req/min ·docs.bitfinex.com/reference/rest-public-ticker
Crea una API key con permisos acotados (retiros desactivados)
Todo lo que sigue solo necesita una API key para los endpoints autenticados — tasas, velas y libros son públicos. Cuando crees una key (Bitfinex → API Keys → Create New Key), acótala a lo que un prestamista realmente necesita: Margin Funding lectura + escritura (para ver y colocar ofertas), Wallets lectura (para ver saldos) y Account History lectura (para el ledger). Deja retiros, trading y transferencias desactivados.
Un bot de funding nunca necesita la capacidad de mover tu dinero fuera del exchange. Una key sin permisos de retiro ni trading puede, en el peor de los casos, prestar tu billetera de funding a una mala tasa — no puede vaciarla. Es el mismo acotamiento que impone Stratum: las keys con capacidad de retiro o trading se rechazan al añadirlas.
Ticker, book y funding/stats no usan la misma unidad FRR
Las tasas de ticker y book son fracciones diarias. El campo FRR de funding/stats es 1/365 del FRR diario mostrado. Aplica la fórmula correcta antes de comparar.
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 × 100curl 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"Los endpoints que importan para el funding
Públicos (sin key, api-pub.bitfinex.com)
GET /v2/ticker/fUSD
Ticker de funding — el FRR (índice 0, una tasa diaria), mejor bid/ask con sus períodos, volumen diario. El endpoint de lending más útil de todos.
GET /v2/candles/{key}/hist
Velas históricas de tasas de funding por tenor, p. ej. la key trade:1h:fUSD:p2 para funding USD a 2 días. Esta es la serie contra la que haces backtests.
GET /v2/book/fUSD/P2 y /R0
El libro de funding en vivo — niveles de precio agregados (P0–P3) u órdenes en crudo (R0). Tasa, período y tamaño de cada bid y oferta en reposo.
GET /v2/funding/stats/fUSD/hist
Estadísticas horarias de funding: FRR, período medio, funding total en uso. Trampa: la columna FRR se almacena como FRR/365 — multiplica por 365 para que cuadre con el ticker.
Autenticados (api.bitfinex.com, firmados con HMAC)
POST /v2/auth/r/wallets
Saldos de billeteras, incluida la billetera de funding desde la que presta un bot.
POST /v2/auth/r/funding/offers/fUSD
Tus ofertas de funding abiertas; la variante /hist devuelve las ejecutadas y canceladas.
POST /v2/auth/r/funding/credits/fUSD
El funding actualmente prestado (créditos activos): tasa, período, hora de apertura. La variante /hist es tu historial de préstamos cerrados.
POST /v2/auth/w/funding/offer/submit
Coloca una oferta de funding: símbolo, importe, tasa diaria, período (2–120 días). Cancela con offer/cancel u offer/cancel/all.
POST /v2/auth/r/ledgers/USD/hist
El ledger — cada pago de intereses y su deducción de la tarifa del 15%, por préstamo y por día. La única base correcta para cifras de ganancias e impuestos.
POST /v2/auth/w/funding/keep
Controla la auto-renovación por crédito — el equivalente por API del interruptor de auto-renovación de la interfaz.
Ejemplos en Python
Lee el FRR y el libro de funding (sin key)
import requests
PUB = "https://api-pub.bitfinex.com"
# Ticker de funding: el índice 0 es el FRR, cotizado como tasa DIARIA
ticker = requests.get(f"{PUB}/v2/ticker/fUSD", timeout=10).json()
frr_daily = ticker[0]
print(f"FRR: {frr_daily * 365 * 100:.2f}% APR")
# Parte superior del libro de funding en vivo (agregado)
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}")Coloca una oferta de funding (autenticado)
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)) # debe crecer estrictamente por key
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()
# Ofrece $150 (mínimo de Bitfinex) al 0.03% diario (~10.95% APR) por 2 días
result = auth_post("v2/auth/w/funding/offer/submit", {
"type": "LIMIT", "symbol": "fUSD",
"amount": "150", "rate": "0.0003", "period": 2,
})
print(result)Las tasas en la API son siempre diarias — multiplica por 365 para el APR — y siempre brutas, antes de la tarifa del 15% de Bitfinex sobre el interés ganado. La oferta mínima es el equivalente a $150; los períodos van de 2 a 120 días. Si prefieres un cliente mantenido en lugar de firmar a mano, Bitfinex publica una librería oficial de Python (bfxapi).
Límites de peticiones y las trampas que cuestan horas de verdad
Los nonces deben crecer estrictamente
Cada petición firmada necesita un bfx-nonce mayor que el anterior para esa key. Dos procesos compartiendo una key colisionarán con errores "nonce: small" — usa una key por proceso.
Límites de peticiones por endpoint
Los endpoints públicos permiten aproximadamente 10–90 peticiones/minuto según la ruta; los autenticados son similares. Excederlos devuelve HTTP 429 con un cuerpo ERR_RATE_LIMIT — retrocede exponencialmente y cachea las lecturas.
funding/stats almacena FRR/365
La columna FRR de /v2/funding/stats es el FRR diario dividido entre 365, mientras que /v2/ticker cotiza la tasa diaria directamente. Multiplica el valor de stats por 365 antes de comparar — si no, sesga los backtests silenciosamente.
Todo es bruto de tarifas
Las tasas del libro, las velas y el FRR son todos pre-tarifa. Tu billetera recibe el 85% del interés ganado (82% para ofertas ocultas). Concilia contra el ledger, no contra la tasa cotizada.
Los préstamos se cierran antes de tiempo
Un crédito a 120 días no significa 120 días de intereses — los prestatarios devuelven cuando cierran posiciones, y los créditos pueden volver en días. Modela la duración esperada, no el período nominal.
Si prefieres no operar esto tú mismo
Todo lo anterior es lo que Stratum opera en producción: los mismos endpoints, firmas, backoff y conciliación de ledger, además de 11 estrategias con backtest sobre tres años de velas de funding, modo paper y exportaciones de impuestos — detrás de una key sin permiso de retiro acotada exactamente como se describe en el paso cero. Construye tu propio bot si disfrutas siendo dueño del stack (esta guía más los proyectos open-source son un camino real); usa uno alojado si prefieres saltarte los bugs de nonce y los 429 a las 3 de la madrugada.
Preguntas frecuentes sobre la API de Bitfinex
¿Qué permisos de API necesita un bot de lending de Bitfinex?
Margin Funding lectura y escritura, Wallets lectura y Account History lectura. Retiros, trading y transferencias deben quedar desactivados — un bot de lending nunca necesita mover fondos fuera del exchange, y una key acotada limita el daño si alguna vez se filtra.
¿Es gratis usar la API de Bitfinex?
Sí. Tanto la API pública (tasas, velas, libros) como la autenticada (ofertas, billeteras, ledgers) son gratuitas; solo necesitas una cuenta y una API key para la parte autenticada. Los endpoints públicos de api-pub.bitfinex.com no necesitan key alguna.
¿Existe una librería oficial de Python para Bitfinex?
Sí — bfxapi, publicada por Bitfinex, cubre tanto REST como WebSocket. Los ejemplos de esta página usan requests plano más firma HMAC hecha a mano para que veas exactamente qué ocurre en el cable; para código de producción la librería oficial te ahorra boilerplate.
¿Las tasas de la API de Bitfinex son diarias o anuales?
Diarias. Una tasa de 0.0003 significa 0.03% por día, aproximadamente 10.95% APR simple. Multiplica por 365 para el APR, y recuerda que toda tasa cotizada es bruta — Bitfinex se queda con el 15% del interés ganado, así que multiplica por 0.85 para lo que llega a tu billetera.
¿Necesito la API WebSocket para un bot de lending?
No para empezar. El polling por REST cubre un bot sencillo. WebSocket (wss://api-pub.bitfinex.com/ws/2 público, wss://api.bitfinex.com/ws/2 autenticado) importa cuando quieres actualizaciones del libro en vivo o notificaciones instantáneas de ejecución sin quemar tu límite de peticiones REST — así es como Stratum rastrea eventos de billetera, oferta y crédito en tiempo real.
¿Cuáles son los límites de peticiones de la API de Bitfinex?
Varían por endpoint, aproximadamente 10–90 peticiones por minuto en rutas públicas y presupuestos comparables en las autenticadas. Exceder un límite devuelve HTTP 429 (ERR_RATE_LIMIT); los clientes bien educados cachean las lecturas públicas y retroceden exponencialmente ante los 429. Las cifras exactas están listadas por endpoint en la documentación oficial.
La API es la parte fácil
Colocar una oferta son veinte líneas de Python; saber qué tasa y qué tenor ofrecer es el problema de verdad. Stratum ejecuta estrategias con backtest sobre la misma API descrita arriba — o toma el código de esta página y construye el tuyo.